home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 23 / Amiga Format AFCD23 (Feb 1998, Issue 107).iso / +look_here_1st!+ / reader_requests / alienbreed3d2 / truecolrender.s < prev    next >
Text File  |  1997-11-28  |  55KB  |  3,890 lines

  1.  
  2. * the 'Hello World' program in 68000 Assembler
  3. * the C version can be found in the Intuition manual
  4.  
  5. * this source code (C) HiSoft 1992 All Rights Reserved
  6.  
  7. * for Devpac Amiga Version 2 the following symbols were changed
  8. * to avoid clashes with the new include files:
  9. * Screen->MyScreen, NewScreen->MyNewScreen
  10. * Window->MyWindow, NewWindow->MyNewWindow
  11.  
  12.     opt    c+,d+
  13.  
  14.     include    workbench:utilities/devpac/system            use pre-assembled header
  15.     include    exec/exec_lib.i
  16.     include    intuition/intuition.i
  17.     include    intuition/intuition_lib.i
  18.     include    graphics/graphics_lib.i
  19.     include    graphics/text.i
  20.  
  21. INTUITION_REV    equ    31        v1.1
  22. GRAPHICS_REV    equ    31        v1.1
  23.  
  24. * Open the intuition library
  25.  
  26.     moveq    #100,d4            default error return code
  27.  
  28.     moveq    #INTUITION_REV,d0    version
  29.     lea    int_name(pc),a1
  30.     CALLEXEC OpenLibrary
  31.     tst.l    d0
  32.     beq    exit_false        if failed then quit
  33.     move.l    d0,_IntuitionBase    else save the pointer
  34.  
  35.     moveq    #GRAPHICS_REV,d0
  36.     lea    graf_name(pc),a1
  37.     CALLEXEC OpenLibrary
  38.     tst.l    d0
  39. ;    beq    exit_closeint        if failed then close Int, exit
  40.     move.l    d0,_GfxBase
  41.     lea    MyNewScreen(pc),a0
  42.     CALLINT    OpenScreen        open a screen
  43.     tst.l    d0
  44. ;    beq    exit_closeall        if failed the close both, exit
  45.     move.l    d0,MyScreen
  46.  
  47.     move.l MyScreen,a0
  48.     lea sc_BitMap(a0),a0
  49.     lea bm_Planes(a0),a0
  50.  
  51.     
  52.     move.l #RAWSCRN,(a0)
  53.     move.l #RAWSCRN+10240*4,4(a0)
  54.     move.l #RAWSCRN+10240*4*2,8(a0)
  55.     move.l #RAWSCRN+10240*4*3,12(a0)
  56.     move.l #RAWSCRN+10240*4*4,16(a0)
  57.     move.l #RAWSCRN+10240*4*5,20(a0)
  58.     move.l #RAWSCRN+10240*4*6,24(a0)
  59.     move.l #RAWSCRN+10240*4*7,28(a0)
  60.  
  61. * now initialise a NewWindow structure. This is normally easier to
  62. * do with dc.w/dc.l statement etc, but for comparison with the C
  63. * version we do it like this
  64.     lea    MyNewWindow(pc),a0    good place to start
  65.     move.w    #20,nw_LeftEdge(a0)
  66.     move.w    #20,nw_TopEdge(a0)
  67.     move.w    #300,nw_Width(a0)
  68.     move.w    #100,nw_Height(a0)
  69.     move.b    #0,nw_DetailPen(a0)
  70.     move.b    #1,nw_BlockPen(a0)
  71.     move.l    #window_title,nw_Title(a0)
  72. _temp    set    WINDOWCLOSE!SMART_REFRESH!ACTIVATE!WINDOWSIZING
  73.     move.l    #_temp!WINDOWDRAG!WINDOWDEPTH,nw_Flags(a0)
  74.     move.l    #CLOSEWINDOW,nw_IDCMPFlags(a0)
  75.     move.w    #CUSTOMSCREEN,nw_Type(a0)
  76.     clr.l    nw_FirstGadget(a0)
  77.     clr.l    nw_CheckMark(a0)
  78.     move.l    MyScreen(pc),nw_Screen(a0)
  79.     clr.l    nw_BitMap(a0)
  80.     move.w    #100,nw_MinWidth(a0)
  81.     move.w    #25,nw_MinHeight(a0)
  82.     move.w    #640,nw_MaxWidth(a0)
  83.     move.w    #200,nw_MaxHeight(a0)
  84.  
  85. * thats it set up, now open the window (a0=NewWindow already)
  86. ;    CALLINT    OpenWindow
  87. ;    tst.l    d0
  88. ;    beq    exit_closescr            if failed
  89. ;    move.l    d0,MyWindow            save it
  90. ;
  91. ;    move.l    d0,a1                window
  92. ;    move.l    wd_RPort(a1),a1            rastport
  93. ;    moveq    #20,d0                X
  94. ;    moveq    #20,d1                Y
  95. ;    CALLGRAF Move                move the cursor
  96. ;
  97. ;    move.l    MyWindow(pc),a0
  98. ;    move.l    wd_RPort(a0),a1            rastport
  99. ;    lea    hello_message(pc),a0
  100. ;    moveq    #11,d0
  101. ;    CALLGRAF Text                print something
  102. ;
  103. ;    move.l    MyWindow(pc),a0
  104. ;    move.l    wd_UserPort(a0),a0
  105. ;    move.b    MP_SIGBIT(a0),d1        (misprint in manual)
  106. ;    moveq    #0,d0
  107. ;    bset    d1,d0                do a shift
  108. ;    CALLEXEC Wait
  109.  
  110. ;    moveq    #0,d4                return code
  111.  
  112. * various exit routines that do tidying up, given a return code in d4
  113.  
  114. ;    move.l    MyWindow(pc),a0
  115. ;    CALLINT CloseWindow
  116.  
  117. ;exit_closescr
  118. ;    move.l    MyScreen(pc),a0
  119. ;    CALLINT CloseScreen
  120.  
  121. ;exit_closeall
  122. ;    move.l    _GfxBase(pc),a1
  123. ;    CALLEXEC CloseLibrary
  124.  
  125. ;exit_closeint
  126. ;    move.l    _IntuitionBase(pc),a1
  127. ;    CALLEXEC CloseLibrary
  128.  
  129. ;done:
  130. ;    bra done
  131.  
  132.  move.l #PALETTEBIT,a0
  133.  move.l #COPIEDPAL+4,a1
  134.  move.w #255,d0
  135.  
  136. copydown:
  137.  move.b 1(a0),(a1)
  138.  move.b 3(a0),4(a1)
  139.  move.b 5(a0),8(a1)
  140.  add.w #6,a0
  141.  add.w #12,a1
  142.  dbra d0,copydown
  143.  
  144.  move.w #256,COPIEDPAL
  145.  move.w #0,COPIEDPAL+2
  146. LOOKFORME:
  147.  move.l MyScreen,a0
  148.  lea sc_ViewPort(a0),a0
  149.  move.l #COPIEDPAL,a1
  150.  move.l _GfxBase,a6
  151.  jsr -$372(a6)
  152.  
  153.  move.l MyScreen,a4
  154.  move.w sc_MouseX(a4),d0
  155.  move.w sc_MouseY(a4),d1
  156.  move.w d0,OLDXM
  157.  move.w d1,OLDYM
  158.     
  159.  move.l 4.w,a6
  160.  move.l #doslibname,a1
  161.  moveq #0,d0
  162.  jsr -552(a6)
  163.  move.l d0,doslib
  164.  
  165.  move.l doslib,a6
  166.  move.l #OBJNAME,d1
  167.  move.l #1005,d2
  168.  jsr -30(a6)
  169.  move.l d0,ROTATEDPTS
  170.  
  171.  move.l doslib,a6
  172.  move.l d0,d1
  173.  move.l #POLYGONDATA,d2
  174.  move.l #30000,d3
  175.  jsr -42(a6)
  176.  
  177.  move.l doslib,a6
  178.  move.l ROTATEDPTS,d1
  179.  jsr -36(a6)
  180.  
  181.     
  182. loop:
  183.  
  184.  move.l #POLYGONDATA,a3
  185.  move.w (a3)+,SORTIT
  186.  move.l a3,START_OF_OBJECT
  187.     
  188.  move.w (a3)+,num_points
  189.  move.w (a3)+,d6
  190.  move.w d6,num_frames
  191.  move.l a3,POINTER_TO_POINTERS
  192.  lea (a3,d6.w*4),a3
  193.  move.l a3,LinesPtr
  194.  moveq #0,d5
  195.  moveq #0,d2
  196.  
  197.  move.l POINTER_TO_POINTERS,a4
  198.  move.w (a4,d5.w*4),d2
  199.  add.l START_OF_OBJECT,d2
  200.  move.l d2,PtsPtr
  201.  move.w 2(a4,d5.w*4),d5
  202.  add.l START_OF_OBJECT,d5
  203.  move.l d5,PolyAngPtr
  204.  move.l d2,a3
  205.  move.w num_points,d5
  206.  
  207.  move.l (a3)+,OBJONOFF
  208.  
  209.  move.l a3,PointAngPtr
  210.  add.w d5,d5
  211.  move.w d5,d2
  212.  add.w d5,d5
  213.  add.w d5,d2
  214.  add.w d2,a3
  215.  move.l a3,PtsPtr
  216.  
  217.  move.l MyScreen,a4
  218.  move.w sc_MouseX(a4),d0
  219.  move.w sc_MouseY(a4),d1
  220.  
  221.  sub.w OLDXM,d0
  222.  sub.w OLDYM,d1
  223.  add.w d0,OLDXM
  224.  add.w d1,OLDYM
  225.  
  226.  btst #6,$bfe001
  227.  beq.s .SHIFTABOUT
  228.  
  229.  muls #8190,d0
  230.  divs #320,d0
  231.  add.w d0,YANG
  232.  and.w #8190,YANG
  233.  muls #8190,d1
  234.  divs #320,d1
  235.  and.w #8190,d1
  236.  add.w d1,XANG
  237.  and.w #8190,XANG
  238.  
  239. ; add.w #40,AANG
  240. ; add.w #70,BANG
  241. ; and.w #8191,AANG
  242. ; and.w #8191,BANG
  243.  
  244. ; add.w #60,CANG
  245. ; add.w #90,DANG
  246. ; and.w #8191,CANG
  247. ; and.w #8191,DANG
  248.  
  249.  
  250.  bra .ROTABOUT
  251. .SHIFTABOUT
  252.  
  253.   muls #8190,d0
  254.  divs #320,d0
  255.  add.w d0,BANG
  256.  and.w #8190,BANG
  257.  muls #8190,d1
  258.  divs #320,d1
  259.  and.w #8190,d1
  260.  add.w d1,AANG
  261.  and.w #8190,AANG
  262.  
  263.  
  264. .ROTABOUT
  265.  
  266.  move.w AANG,d1
  267.  move.w BANG,d3
  268. ; cmp.w #2,d6
  269. ; bne.s .notsecrot
  270. ; move.w CANG,d1
  271. ; move.w DANG,d3
  272. ;.notsecrot
  273.  move.l #SINETABLE,a1
  274.  move.w (a1,d1.w),XSIN    ;xsin
  275.  move.w (a1,d3.w),YSIN    ;ysin
  276.  
  277.  add.w #2048,a1
  278.  move.w (a1,d1.w),XCOS    ;xcos
  279.  move.w (a1,d3.w),YCOS    ;ycos
  280.  
  281.  move.w XANG,d1
  282.  move.w YANG,d3
  283. ; cmp.w #2,d6
  284. ; bne.s .notsecrot
  285. ; move.w CANG,d1
  286. ; move.w DANG,d3
  287. ;.notsecrot
  288.  move.l #SINETABLE,a1
  289.  move.w (a1,d1.w),XSIN2    ;xsin
  290.  move.w (a1,d3.w),YSIN2    ;ysin
  291.  
  292.  add.w #2048,a1
  293.  move.w (a1,d1.w),XCOS2    ;xcos
  294.  move.w (a1,d3.w),YCOS2    ;ycos
  295.  
  296.  
  297. ************************************************
  298. ************************************************
  299. ************************************************
  300. ************************************************
  301. ************************************************
  302. ************************************************
  303. ************************************************
  304. ************************************************
  305. ************************************************
  306. ************************************************
  307. ************************************************
  308. ************************************************
  309. ************************************************
  310. ************************************************
  311.  
  312. *SHADOW BUFFER CALCULATION
  313.  
  314.  
  315. ; First, calculate the normal brightnesses
  316. ; for points. NB: -1,-1,-1 = this point not used
  317. ; in gouraud shading.
  318.  
  319.  move.l #NORMBRIGHTS,a2
  320.  move.l PointAngPtr,a0
  321.  move.w num_points,d7
  322.  
  323.  move.l #NORMVECTS,a5
  324.  
  325.  subq #1,d7
  326.  
  327. CALCNORMBRIGHTS:
  328.  
  329.  move.w (a0)+,d0
  330.  move.w (a0)+,d1
  331.  move.w (a0)+,d2
  332.  
  333.  move.w #0,d6
  334.  
  335.  cmp.w #-1,d0
  336.  bne.s .notnot
  337.  cmp.w #-1,d1
  338.  bne.s .notnot
  339.  cmp.w #-1,d2
  340.  bne.s .notnot
  341.  
  342.  move.w #-1,x1
  343.  move.w #-1,y1
  344.  move.w #-1,z1
  345.  bra .dontbother
  346.  
  347. .notnot:
  348.  neg.w d1
  349.  
  350.  move.w d0,d3
  351.  move.w d2,d5
  352.  
  353.  muls YCOS,d0
  354.  muls YSIN,d2
  355.  sub.l d2,d0
  356.  add.l d0,d0
  357.  swap d0
  358. ; asr.l #6,d0    ; new x*512
  359.  
  360.  muls YSIN,d3
  361.  muls YCOS,d5
  362.  add.l d5,d3
  363.  add.l d3,d3
  364.  swap d3
  365.  move.w d3,d2    ; new z
  366.  
  367.  move.w d1,d4
  368.  move.w d2,d5
  369.  muls XCOS,d1
  370.  muls XSIN,d2
  371.  sub.l d2,d1
  372.  add.l d1,d1
  373.  swap d1
  374.  
  375.  muls XSIN,d4
  376.  muls XCOS,d5
  377.  add.l d5,d4
  378.  add.l d4,d4
  379.  swap d4
  380.  move.w d4,d2    ; new z
  381.  
  382.  
  383.  move.w d0,d3
  384.  move.w d2,d5
  385.  
  386.  muls YCOS2,d0
  387.  muls YSIN2,d2
  388.  sub.l d2,d0
  389.  add.l d0,d0
  390.  swap d0
  391.  
  392.  muls YSIN2,d3
  393.  muls YCOS2,d5
  394.  add.l d5,d3    
  395.  add.l d3,d3
  396.  swap d3
  397.  move.w d3,d2    ; new z
  398.  
  399.  move.w d1,d4
  400.  move.w d2,d5
  401.  muls XCOS2,d1
  402.  muls XSIN2,d2
  403.  sub.l d2,d1
  404.  add.l d1,d1
  405.  swap d1
  406.  
  407.  muls XSIN2,d4
  408.  muls XCOS2,d5
  409.  add.l d5,d4
  410.  add.l d4,d4
  411.  swap d4
  412.  
  413.  move.w d0,x1
  414.  move.w d1,y1
  415.  move.w d4,z1
  416.  
  417.  
  418.  move.w d1,d6    ; new y 
  419.  
  420.  asr.w #4,d6
  421.  add.w #20,d6
  422.  
  423.  ble.s .okokok
  424.  
  425.  moveq #0,d6
  426.  
  427. .okokok:
  428.  add.w #$1c,d6
  429.  bge.s .okokokok
  430.  moveq #0,d6
  431. .okokokok:
  432.  
  433.  add.w #64,d6
  434.  
  435. ; cmp.w #28,d6
  436. ; blt.s .okbig
  437. ; move.w #28,d6
  438. ;.okbig
  439.  
  440. .dontbother:
  441.  move.w x1,(a5)+
  442.  move.w y1,(a5)+
  443.  move.w z1,(a5)+
  444.  move.w d6,(a2)+
  445.  
  446.  dbra d7,CALCNORMBRIGHTS
  447.  
  448.  
  449. ; Next, calculate the point coords for
  450. ; the shadow buffer.
  451.  
  452.  move.l #SHADOWPTS,a2
  453.  move.l PtsPtr,a0
  454.  move.w num_points,d7
  455.  subq #1,d7
  456.  
  457. ROTPTLOPSHAD:
  458.  move.w (a0)+,d0
  459.  move.w d0,d3
  460.  move.w (a0)+,d1
  461.  move.w (a0)+,d2
  462.  move.w d2,d5
  463.  
  464.  muls YCOS,d0
  465.  muls YSIN,d2
  466.  sub.l d2,d0
  467.  add.l d0,d0
  468.  swap d0
  469. ; asr.l #6,d0    ; new x*512
  470.  
  471.  muls YSIN,d3
  472.  muls YCOS,d5
  473.  add.l d5,d3
  474.  add.l d3,d3
  475.  swap d3
  476.  move.w d3,d2    ; new z
  477.  
  478.  move.w d1,d4
  479.  move.w d2,d5
  480.  muls XCOS,d1
  481.  muls XSIN,d2
  482.  sub.l d2,d1
  483.  add.l d1,d1
  484.  swap d1
  485.  
  486.  muls XSIN,d4
  487.  muls XCOS,d5
  488.  add.l d5,d4
  489.  add.l d4,d4
  490.  swap d4
  491.  move.w d4,d2    ; new z
  492.   
  493.  move.w d0,d3
  494.  move.w d2,d5
  495.  
  496.  muls YCOS2,d0
  497.  muls YSIN2,d2
  498.  sub.l d2,d0
  499.  asr.l #6,d0    ; new x*512
  500.  
  501.  muls YSIN2,d3
  502.  muls YCOS2,d5
  503.  add.l d5,d3
  504.  add.l d3,d3
  505.  swap d3
  506.  move.w d3,d2    ; new z
  507.  
  508.  move.w d1,d4
  509.  move.w d2,d5
  510.  muls XCOS2,d1
  511.  muls XSIN2,d2
  512.  sub.l d2,d1
  513.  asr.l #6,d1    ; new y*512
  514.  
  515.  muls XSIN2,d4
  516.  muls XCOS2,d5
  517.  add.l d5,d4
  518.  add.l d4,d4
  519.  swap d4
  520.  move.w d4,d2    ; new z
  521.  
  522.  ext.l d2
  523.  
  524.  move.w XOFF,d5
  525.  ext.l d5
  526.  asl.l #8,d5
  527.  add.l d5,d5
  528.  add.l d5,d0
  529.  
  530.  move.l d0,(a2)+
  531.  move.l d1,(a2)+
  532.  move.w d2,(a2)+
  533.  
  534.  dbra d7,ROTPTLOPSHAD
  535.  
  536.  
  537.  
  538. ***************************************
  539. * Calculate viewer position for specularity..
  540.  
  541.  move.w #0,d0
  542.  move.w #0,d1
  543.  move.w #-1024,d2
  544.  
  545. ; move.w d0,d3
  546. ; move.w d2,d5
  547. ;
  548. ; muls YCOS,d0
  549. ; muls YSIN,d2
  550. ; sub.l d2,d0
  551. ; add.l d0,d0
  552. ; swap d0
  553. ; asr.l #6,d0    ; new x*512
  554. ; muls YSIN,d3
  555. ; muls YCOS,d5
  556. ; add.l d5,d3
  557. ; add.l d3,d3
  558. ; swap d3
  559. ; move.w d3,d2    ; new z
  560. ;
  561. ; move.w d1,d4
  562. ; move.w d2,d5
  563. ; muls XCOS,d1
  564. ; muls XSIN,d2
  565. ; sub.l d2,d1
  566. ; add.l d1,d1
  567. ; swap d1
  568. ; muls XSIN,d4
  569. ; muls XCOS,d5
  570. ; add.l d5,d4
  571. ; add.l d4,d4
  572. ; swap d4
  573. ; move.w d4,d2    ; new z
  574.  
  575.  move.w d0,d3
  576.  move.w d2,d5
  577.  
  578.  muls YCOS2,d0
  579.  muls YSIN2,d2
  580.  sub.l d2,d0
  581.  add.l d0,d0
  582.  swap d0
  583.  
  584.  muls YSIN2,d3
  585.  muls YCOS2,d5
  586.  add.l d5,d3    
  587.  add.l d3,d3
  588.  swap d3
  589.  move.w d3,d2    ; new z
  590.  
  591.  move.w d1,d4
  592.  move.w d2,d5
  593.  muls XCOS2,d1
  594.  muls XSIN2,d2
  595.  sub.l d2,d1
  596.  add.l d1,d1
  597.  swap d1
  598. ; asr.l #6,d1    ; new y*512
  599.  
  600.  muls XSIN2,d4
  601.  muls XCOS2,d5
  602.  add.l d5,d4
  603.  add.l d4,d4
  604.  swap d4
  605.  
  606.  move.w d0,x2b
  607.  move.w d1,y2b
  608.  move.w d4,z2b
  609.  
  610. ; Now the specular highlight efforts....
  611.  
  612.  move.l #SPECBRIGHTS,a2
  613.  move.l #NORMVECTS,a1
  614.  
  615.  move.l #SHADOWPTS,a5
  616.  
  617.  move.w num_points,d7
  618.  subq #1,d7
  619.  
  620. CALCSPECBRIGHTS:
  621.  
  622.  move.w (a1)+,x1
  623.  move.w (a1)+,y1
  624.  move.w (a1)+,z1
  625.  
  626.  move.w x2b,d0
  627.  move.l (a5)+,d1
  628.  asr.l #8,d1
  629.  asr.l #1,d1
  630.  sub.w d1,d0
  631.  move.w d0,x2
  632.  move.w y2b,d0
  633.  move.l (a5)+,d1
  634.  asr.l #8,d1
  635.  asr.l #1,d1
  636.  sub.w d1,d0
  637.  move.w d0,y2
  638.  move.w z2b,d0
  639.  sub.w (a5)+,d0
  640.  move.w d0,z2
  641.  
  642.  move.w #0,d6
  643.  
  644.  cmp.w #-1,x1
  645.  bne.s .notnot
  646.  cmp.w #-1,y1
  647.  bne.s .notnot
  648.  cmp.w #-1,z1
  649.  beq .dontbother
  650. .notnot: 
  651.  
  652.  move.w x2,d2
  653.  muls d2,d2
  654.  move.w y2,d1
  655.  muls d1,d1
  656.  add.l d1,d2
  657.  move.w z2,d1
  658.  muls d1,d1
  659.  add.l d1,d2
  660.  
  661.  jsr CALCSQROOT
  662.  
  663.  move.w d2,l2
  664.  
  665.  move.w y1,d0
  666.  muls z2,d0
  667.  move.w y2,d1
  668.  muls z1,d1
  669.  sub.l d1,d0    ; x4
  670.  
  671.  move.w z1,d1
  672.  muls x2,d1
  673.  move.w z2,d2
  674.  muls x1,d2
  675.  sub.l d2,d1    ; y4
  676.  
  677.  move.w x1,d2
  678.  muls y2,d2
  679.  move.w x2,d3
  680.  muls y1,d3
  681.  sub.l d3,d2    ; z4
  682.  
  683.  asr.l #8,d0
  684.  asr.l #8,d1
  685.  asr.l #8,d2
  686.  asr.l #2,d0
  687.  asr.l #2,d1
  688.  asr.l #2,d2
  689.  
  690.  move.w x1,d3
  691.  muls d1,d3
  692.  move.w y1,d4
  693.  muls d0,d4
  694.  sub.l d4,d3
  695.  asr.l #8,d3
  696.  asr.l #1,d3
  697.  add.w z2,d3
  698.  
  699.  muls #1024,d3
  700.  divs l2,d3
  701.  
  702.  move.w d3,z3
  703.  
  704.  move.w y1,d3
  705.  muls d2,d3
  706.  move.w z1,d4
  707.  muls d1,d4
  708.  sub.l d4,d3
  709.  asr.l #8,d3
  710.  asr.l #1,d3
  711.  add.w x2,d3
  712.  muls #1024,d3
  713.  divs l2,d3
  714.  
  715.  move.w d3,x3
  716.  
  717.  move.w z1,d3
  718.  muls d0,d3
  719.  move.w x1,d4
  720.  muls d2,d4
  721.  sub.l d4,d3
  722.  asr.l #8,d3
  723.  asr.l #1,d3
  724.  add.w y2,d3
  725.  muls #1024,d3
  726.  divs l2,d3
  727.  
  728.  move.w d3,y3
  729.  
  730.  move.w z3,d3
  731.  asr.w #3,d3
  732.  add.w #128,d3
  733.  bge.s .okpp
  734.  moveq #0,d3
  735. .okpp
  736.  cmp.w #255,d3
  737.  ble.s .okppp
  738.  move.w #255,d3
  739. .okppp
  740.  
  741.  move.b d3,d6
  742.  lsl.w #8,d6
  743.  
  744.  move.w x3,d3
  745.  asr.w #3,d3
  746.  
  747.  add.w #128,d3
  748.  bge.s .okp
  749.  moveq #0,d3
  750. .okp
  751.  cmp.w #255,d3
  752.  ble.s .okpppp
  753.  move.w #255,d3
  754. .okpppp
  755.  move.b d3,d6
  756.   
  757. ; add.w y2,d3
  758. ;
  759. ; move.w d3,d6
  760. ;
  761. ; asr.w #4,d6
  762. ; add.w #30,d6
  763. ; ble.s .okokok
  764. ; moveq #0,d6
  765. ;.okokok:
  766. ; add.w #$1c,d6
  767. ; bge.s .okokokok
  768. ; moveq #0,d6
  769. ;.okokokok:
  770.  
  771. ; cmp.w #28,d6
  772. ; blt.s .okbig
  773. ; move.w #28,d6
  774. ;.okbig
  775.  
  776. .dontbother:
  777.  move.w d6,(a2)+
  778.  move.w y3,(a2)+
  779.  
  780.  dbra d7,CALCSPECBRIGHTS
  781.  
  782.  
  783.  
  784.  
  785. * NOW THE POINTS FOR ON-SCREENNESS
  786.  
  787.  move.l #ROTATEDPTS,a2
  788.  move.l PtsPtr,a0
  789.  move.w num_points,d7
  790.  subq #1,d7
  791.  
  792. ROTPTLOP:
  793.  
  794.  move.w (a0)+,d0
  795.  move.w d0,d3
  796.  move.w (a0)+,d1
  797.  move.w (a0)+,d2
  798.  move.w d2,d5
  799.  
  800.  
  801.  
  802.  muls YCOS,d0
  803.  muls YSIN,d2
  804.  sub.l d2,d0
  805.  asr.l #6,d0    ; new x*512
  806.  
  807.  muls YSIN,d3
  808.  muls YCOS,d5
  809.  add.l d5,d3
  810.  add.l d3,d3
  811.  swap d3
  812.  move.w d3,d2    ; new z
  813.  
  814.  move.w d1,d4
  815.  move.w d2,d5
  816.  muls XCOS,d1
  817.  muls XSIN,d2
  818.  sub.l d2,d1
  819.  asr.l #6,d1    ; new y*512
  820.  
  821.  muls XSIN,d4
  822.  muls XCOS,d5
  823.  add.l d5,d4
  824.  add.l d4,d4
  825.  swap d4
  826.  move.w d4,d2    ; new z
  827.  
  828.  ext.l d2
  829.  
  830.  move.w XOFF,d5
  831.  ext.l d5
  832.  asl.l #8,d5
  833.  add.l d5,d5
  834.  add.l d5,d0
  835.  
  836.  move.l d0,(a2)+
  837.  move.l d1,(a2)+
  838.  move.w d2,(a2)+
  839.  
  840.  dbra d7,ROTPTLOP
  841.  
  842. ; Now convert the rotated points to the screen:
  843.  
  844.  move.l #ROTATEDPTS,a0
  845.  move.l #ONSCREENPTS,a2
  846.  move.w num_points,d7
  847.  subq #1,d7
  848. CONVERTTOSCREEN:
  849.  move.l (a0)+,d0
  850.  move.l (a0)+,d1
  851.  move.w (a0)+,d2
  852.  add.w ZOFF,d2
  853.  ext.l d2
  854.  
  855.  move.l d0,d3
  856.  asr.l #1,d3
  857.  add.l d3,d0 
  858.  move.l d1,d3
  859.  asr.l #1,d3
  860.  add.l d3,d1 
  861.  
  862.  divs d2,d0
  863.  divs d2,d1
  864.  add.w #160*4,d0
  865.  add.w #128*4,d1
  866.  move.w d0,(a2)+
  867.  move.w d1,(a2)+
  868.  dbra d7,CONVERTTOSCREEN
  869.  
  870.  move.w #254,HIGHPOLY
  871.  
  872.  move.l LinesPtr,a1
  873.  move.l #PartBuffer,a0
  874.  move.l a0,a2
  875.  move.w #15,d0
  876. clrpartbuffSHAD:
  877.  move.l #$80000001,(a2)+
  878.  move.l #$80000001,(a2)+
  879.  move.l #$80000001,(a2)+
  880.  move.l #$80000001,(a2)+
  881.  dbra d0,clrpartbuffSHAD
  882.  
  883.  move.l #SHADOWPTS,a2
  884.  move.l OBJONOFF,d5
  885.  
  886.  move.w #0,d4
  887.  tst.w SORTIT
  888.  bne.s PutInPartsSHAD
  889.  
  890.  
  891. putinunsortedSHAD:
  892.  move.w (a1)+,d7
  893.  blt doneallpartsSHAD
  894.  lsr.l #1,d5
  895.  bcs.s .yeson
  896.  addq #2,a1
  897.  bra putinunsortedSHAD
  898. .yeson:
  899.  
  900.  move.w (a1)+,d6
  901.  move.l #0,(a0)+
  902.  move.w d7,(a0)+
  903.  move.w d4,(a0)+
  904.  addq #1,d4
  905.  bra putinunsortedSHAD
  906.  
  907. PutInPartsSHAD
  908.  move.w (a1)+,d7
  909.  blt doneallpartsSHAD
  910.  
  911.  lsr.l #1,d5
  912.  bcs.s .yeson
  913.  addq #2,a1
  914.  bra PutInPartsSHAD
  915. .yeson:
  916.  
  917.  move.w (a1)+,d6
  918.  move.l 4(a2,d6.w),d0
  919.  add.l #200000,d0
  920.  
  921.  move.l #PartBuffer-8,a0
  922.  
  923. stillfrontSHAD
  924.  addq #8,a0
  925.  cmp.l (a0),d0
  926.  blt stillfrontSHAD
  927.  move.l #endparttab-8,a5
  928. domoreshiftSHAD:
  929.  move.l -8(a5),(a5)
  930.  move.l -4(a5),4(a5)
  931.  subq #8,a5
  932.  cmp.l a0,a5
  933.  bgt.s domoreshiftSHAD
  934.  
  935.  move.l d0,(a0)
  936.  move.w d7,4(a0)
  937.  move.w d4,6(a0)
  938.  addq #1,d4
  939.  bra PutInPartsSHAD
  940.  
  941. doneallpartsSHAD:
  942.  
  943.  move.l #PartBuffer,a0
  944.  
  945. PartLoopSHAD
  946.  move.l (a0)+,d7
  947.  blt nomorepartsSHAD
  948.  
  949.  move.l #SAVEHIGHS,a2
  950.  move.w 2(a0),d0
  951.  move.w HIGHPOLY,(a2,d0.w*2)
  952.  
  953.  moveq #0,d0
  954.  move.w (a0),d0
  955.  addq #4,a0
  956.  add.l START_OF_OBJECT,d0
  957.  move.l d0,a1
  958.  
  959. polylooSHAD:
  960.  
  961.  tst.w (a1)
  962.  blt.s nomorepolysSHAD
  963.  movem.l a0/a1/d7,-(a7)
  964.  bsr doaSHADEpoly
  965.  movem.l (a7)+,a0/a1/d7
  966.  
  967.  move.w (a1),d0
  968.  lea 18(a1,d0.w*4),a1
  969.  
  970.  bra.s polylooSHAD
  971. nomorepolysSHAD:
  972.  sub.w #1,HIGHPOLY
  973.  bra PartLoopSHAD
  974. nomorepartsSHAD:
  975.  
  976. *******************************************
  977. * Now the on-screen bit...
  978. *******************************************
  979.  
  980.  move.l LinesPtr,a1
  981.  move.l #PartBuffer,a0
  982.  move.l a0,a2
  983.  move.w #15,d0
  984. clrpartbuff:
  985.  move.l #$80000001,(a2)+
  986.  move.l #$80000001,(a2)+
  987.  move.l #$80000001,(a2)+
  988.  move.l #$80000001,(a2)+
  989.  dbra d0,clrpartbuff
  990.  
  991.  move.l #ROTATEDPTS,a2
  992.  move.l OBJONOFF,d5
  993.  
  994.  moveq #0,d4
  995.  
  996.  tst.w SORTIT
  997.  bne.s PutInParts
  998.  
  999. putinunsorted:
  1000.  move.w (a1)+,d7
  1001.  blt doneallparts
  1002.  lsr.l #1,d5
  1003.  bcs.s .yeson
  1004.  addq #2,a1
  1005.  bra putinunsorted
  1006. .yeson:
  1007.  
  1008.  move.w (a1)+,d6
  1009.  move.l #0,(a0)+
  1010.  move.w d7,(a0)+
  1011.  move.w d4,(a0)+
  1012.  
  1013.  addq #1,d4
  1014.  bra putinunsorted
  1015.  
  1016. PutInParts
  1017.  move.w (a1)+,d7
  1018.  blt doneallparts
  1019.  
  1020.  lsr.l #1,d5
  1021.  bcs.s .yeson
  1022.  addq #2,a1
  1023.  bra PutInParts
  1024. .yeson:
  1025.  
  1026.  move.w (a1)+,d6
  1027.  move.l (a2,d6.w),d0
  1028.  asr.l #8,d0
  1029.  asr.l #2,d0
  1030.  muls d0,d0
  1031.  move.l 4(a2,d6.w),d2
  1032.  asr.l #8,d2
  1033.  asr.l #2,d2
  1034.  muls d2,d2
  1035.  add.l d2,d0 
  1036.  move.w 8(a2,d6.w),d2
  1037.  add.w #1024,d2
  1038.  muls d2,d2
  1039.  add.l d2,d0
  1040.  
  1041.  move.l #PartBuffer-8,a0
  1042.  
  1043. stillfront
  1044.  addq #8,a0
  1045.  cmp.l (a0),d0
  1046.  blt stillfront
  1047.  move.l #endparttab-8,a5
  1048. domoreshift:
  1049.  move.l -8(a5),(a5)
  1050.  move.l -4(a5),4(a5)
  1051.  subq #8,a5
  1052.  cmp.l a0,a5
  1053.  bgt.s domoreshift
  1054.  
  1055.  move.l d0,(a0)
  1056.  move.w d7,4(a0)
  1057.  move.w d4,6(a0)
  1058.  addq #1,d4
  1059.  bra PutInParts
  1060.  
  1061. doneallparts:
  1062.  
  1063.  move.l #PartBuffer,a0
  1064.  
  1065. PartLoop
  1066.  move.l (a0)+,d7
  1067.  blt nomoreparts
  1068.  
  1069.  move.l #SAVEHIGHS,a2
  1070.  move.w 2(a0),d0
  1071.  move.w (a2,d0.w*2),HIGHPOLY
  1072.  
  1073.  moveq #0,d0
  1074.  move.w (a0),d0
  1075.  addq #4,a0
  1076.  add.l START_OF_OBJECT,d0
  1077.  move.l d0,a1
  1078.  
  1079. polyloo:
  1080.  
  1081.  tst.w (a1)
  1082.  blt.s nomorepolys
  1083.  movem.l a0/a1/d7,-(a7)
  1084.  bsr doapoly
  1085.  movem.l (a7)+,a0/a1/d7
  1086.  
  1087.  move.w (a1),d0
  1088.  lea 18(a1,d0.w*4),a1
  1089.  
  1090.  bra.s polyloo
  1091. nomorepolys:
  1092.  sub.w #1,HIGHPOLY
  1093.  bra PartLoop
  1094. nomoreparts:
  1095.  
  1096. NOPOLYS:
  1097.  
  1098. ; btst #6,$bfe001
  1099. ; beq.s .SHOWSHADOW
  1100.  
  1101.  move.l FASTBUFFER,a0
  1102.  add.l #40*320+64,a0
  1103.  move.l #RAWSCRN,a1
  1104.  add.l #40*160+8,a1
  1105.  move.l #(24)-1,d0
  1106.  move.l #175,d1
  1107.  move.w #128,d2
  1108.  move.w #16+(40*3),d3
  1109.  moveq #0,d4
  1110.  moveq #0,d5
  1111.  jsr CHUNKYTOPLANAR 
  1112.  
  1113.  bra .SHOWNSCRN
  1114.  
  1115. .SHOWSHADOW
  1116.  
  1117.  move.l #SHADOWBUFFER,a0
  1118.  add.l #40*256,a0
  1119.  move.l #RAWSCRN,a1
  1120.  add.l #40*40,a1
  1121.  move.l #(256/8)-1,d0
  1122.  move.l #175,d1
  1123.  move.w #0,d2
  1124.  move.w #8,d3
  1125.  moveq #0,d4
  1126.  moveq #0,d5
  1127.  jsr CHUNKYTOPLANAR 
  1128.  
  1129. .SHOWNSCRN:
  1130.  
  1131.  move.l FASTBUFFER,a0
  1132.  move.l #NEBBIE,a1
  1133.  add.l #40*320+64,a0
  1134.  
  1135.  move.w #175,d0
  1136. clrchunk:
  1137.  move.l (a1)+,(a0)+
  1138.  move.l (a1)+,(a0)+
  1139.  move.l (a1)+,(a0)+
  1140.  move.l (a1)+,(a0)+
  1141.  move.l (a1)+,(a0)+
  1142.  move.l (a1)+,(a0)+
  1143.  move.l (a1)+,(a0)+
  1144.  move.l (a1)+,(a0)+
  1145.  move.l (a1)+,(a0)+
  1146.  move.l (a1)+,(a0)+
  1147.  move.l (a1)+,(a0)+
  1148.  move.l (a1)+,(a0)+
  1149.  move.l (a1)+,(a0)+
  1150.  move.l (a1)+,(a0)+
  1151.  move.l (a1)+,(a0)+
  1152.  move.l (a1)+,(a0)+
  1153.  move.l (a1)+,(a0)+
  1154.  move.l (a1)+,(a0)+
  1155.  move.l (a1)+,(a0)+
  1156.  move.l (a1)+,(a0)+
  1157.  move.l (a1)+,(a0)+
  1158.  move.l (a1)+,(a0)+
  1159.  move.l (a1)+,(a0)+
  1160.  move.l (a1)+,(a0)+
  1161.  move.l (a1)+,(a0)+
  1162.  move.l (a1)+,(a0)+
  1163.  move.l (a1)+,(a0)+
  1164.  move.l (a1)+,(a0)+
  1165.  move.l (a1)+,(a0)+
  1166.  move.l (a1)+,(a0)+
  1167.  move.l (a1)+,(a0)+
  1168.  move.l (a1)+,(a0)+
  1169.  move.l (a1)+,(a0)+
  1170.  move.l (a1)+,(a0)+
  1171.  move.l (a1)+,(a0)+
  1172.  move.l (a1)+,(a0)+
  1173.  move.l (a1)+,(a0)+
  1174.  move.l (a1)+,(a0)+
  1175.  move.l (a1)+,(a0)+
  1176.  move.l (a1)+,(a0)+
  1177.  move.l (a1)+,(a0)+
  1178.  move.l (a1)+,(a0)+
  1179.  move.l (a1)+,(a0)+
  1180.  move.l (a1)+,(a0)+
  1181.  move.l (a1)+,(a0)+
  1182.  move.l (a1)+,(a0)+
  1183.  move.l (a1)+,(a0)+
  1184.  move.l (a1)+,(a0)+
  1185.  add.w #(320-192),a0
  1186.  dbra d0,clrchunk
  1187.  
  1188.  move.l #SHADOWBUFFER,a0
  1189.  move.l #-1,d1
  1190.  move.l #-1,d2
  1191.  move.w #15,d0
  1192. ;clrshad:
  1193. ; move.w #15,d5
  1194. ;innner
  1195. ; move.l d2,(a0)+
  1196. ; move.l d2,(a0)+
  1197. ; move.l d2,(a0)+
  1198. ; move.l d2,(a0)+
  1199. ; move.l d1,(a0)+
  1200. ; move.l d1,(a0)+
  1201. ; move.l d1,(a0)+
  1202. ; move.l d1,(a0)+
  1203. ; move.l d2,(a0)+
  1204. ; move.l d2,(a0)+
  1205. ; move.l d2,(a0)+
  1206. ; move.l d2,(a0)+
  1207. ; move.l d1,(a0)+
  1208. ; move.l d1,(a0)+
  1209. ; move.l d1,(a0)+
  1210. ; move.l d1,(a0)+
  1211. ; move.l d2,(a0)+
  1212. ; move.l d2,(a0)+
  1213. ; move.l d2,(a0)+
  1214. ; move.l d2,(a0)+
  1215. ; move.l d1,(a0)+
  1216. ; move.l d1,(a0)+
  1217. ; move.l d1,(a0)+
  1218. ; move.l d1,(a0)+
  1219. ; move.l d2,(a0)+
  1220. ; move.l d2,(a0)+
  1221. ; move.l d2,(a0)+
  1222. ; move.l d2,(a0)+
  1223. ; move.l d1,(a0)+
  1224. ; move.l d1,(a0)+
  1225. ; move.l d1,(a0)+
  1226. ; move.l d1,(a0)+
  1227. ; move.l d2,(a0)+
  1228. ; move.l d2,(a0)+
  1229. ; move.l d2,(a0)+
  1230. ; move.l d2,(a0)+
  1231. ; move.l d1,(a0)+
  1232. ; move.l d1,(a0)+
  1233. ; move.l d1,(a0)+
  1234. ; move.l d1,(a0)+
  1235. ; move.l d2,(a0)+
  1236. ; move.l d2,(a0)+
  1237. ; move.l d2,(a0)+
  1238. ; move.l d2,(a0)+
  1239. ; move.l d1,(a0)+
  1240. ; move.l d1,(a0)+
  1241. ; move.l d1,(a0)+
  1242. ; move.l d1,(a0)+
  1243. ; move.l d2,(a0)+
  1244. ; move.l d2,(a0)+
  1245. ; move.l d2,(a0)+
  1246. ; move.l d2,(a0)+
  1247. ; move.l d1,(a0)+
  1248. ; move.l d1,(a0)+
  1249. ; move.l d1,(a0)+
  1250. ; move.l d1,(a0)+
  1251. ; move.l d2,(a0)+
  1252. ; move.l d2,(a0)+
  1253. ; move.l d2,(a0)+
  1254. ; move.l d2,(a0)+
  1255. ; move.l d1,(a0)+
  1256. ; move.l d1,(a0)+
  1257. ; move.l d1,(a0)+
  1258. ; move.l d1,(a0)+
  1259. ; dbra d5,innner
  1260. ; exg d1,d2
  1261. ;
  1262. ; dbra d0,clrshad
  1263.  
  1264.  
  1265.  
  1266.     btst #7,$bfe001
  1267.     beq.s exit_closescr
  1268.  
  1269.  
  1270.     add.l #$8000,lmxoff
  1271.     cmp.l #40*65536,lmxoff
  1272.     blt.s .oksm
  1273.     sub.l #40*65536,lmxoff    
  1274. .oksm
  1275.  
  1276.     bra loop
  1277.     
  1278. lmxoff: dc.l 0
  1279.  
  1280. exit_closescr
  1281.     move.l    MyScreen(pc),a0
  1282.     CALLINT CloseScreen
  1283.  
  1284. exit_closeall
  1285.     move.l    _GfxBase(pc),a1
  1286.     CALLEXEC CloseLibrary
  1287.  
  1288. exit_closeint
  1289.     move.l    _IntuitionBase(pc),a1
  1290.     CALLEXEC CloseLibrary
  1291.  
  1292. exit_false
  1293.     move.l    #0,d0                return code
  1294.     rts
  1295.  
  1296. TESTTAB: ds.w 30
  1297.  
  1298. ************************************************
  1299. * SUBROUTINES HERE. ****************************
  1300. ************************************************
  1301.  
  1302.  
  1303. **********************************************************
  1304.  
  1305. * the definition of the screen - note that in assembler you
  1306. * MUST get the sizes of these fields correct, by consulting either
  1307. * the RKM or the header files
  1308.  
  1309.  
  1310. MyNewScreen    dc.w    0,0        left, top
  1311.         dc.w    1280,256        width, height
  1312.         dc.w    8        depth
  1313.         dc.b    0,1        pens
  1314.         dc.w    V_HIRES        viewmodes
  1315.         dc.w    CUSTOMSCREEN    type
  1316.         dc.l    MyFont        font
  1317.         dc.l    screen_title    title
  1318.         dc.l    0        gadgets
  1319.         dc.l    0        bitmap
  1320.  
  1321. * my font definition
  1322. MyFont    dc.l    font_name
  1323.     dc.w    TOPAZ_SIXTY
  1324.     dc.b    FS_NORMAL
  1325.     dc.b    FPF_ROMFONT
  1326.  
  1327. * the variables
  1328. _IntuitionBase    dc.l    0        Intuition lib pointer
  1329. _GfxBase    dc.l    0        graphics lib pointer
  1330. MyScreen        dc.l    0
  1331. MyWindow        dc.l    0
  1332. MyNewWindow    ds.b    nw_SIZE        a buffer
  1333.  
  1334.  
  1335. * some strings
  1336. int_name    INTNAME
  1337. graf_name    GRAFNAME
  1338. hello_message    dc.b    'Hello World'
  1339.  
  1340. * these are C strings, so have to be null terminated
  1341. screen_title    dc.b    'My Own Screen',0
  1342. font_name    dc.b    'topaz.font',0
  1343. window_title    dc.b    'A Simple Window',0
  1344.  
  1345.  even
  1346.  
  1347.  
  1348. doaSHADEpoly:
  1349.  
  1350.  move.w (a1)+,d7    ; sides to draw
  1351.  addq #2,a1        ; avoid holes
  1352.  
  1353.  move.l #SHADOWPTS,a3
  1354.  
  1355.  move.w (a1),d0
  1356.  move.w 4(a1),d1
  1357.  move.w 8(a1),d2
  1358.  muls #10,d0
  1359.  muls #10,d1
  1360.  muls #10,d2
  1361.  move.w 8(a3,d0.w),d3
  1362.  move.w 8(a3,d1.w),d4
  1363.  move.w 8(a3,d2.w),d5
  1364.  move.l (a3,d0.w),d0
  1365.  move.l (a3,d1.w),d1
  1366.  move.l (a3,d2.w),d2
  1367.  asr.l #8,d0
  1368.  asr.l #8,d1
  1369.  asr.l #8,d2
  1370.  asr.l #1,d0
  1371.  asr.l #1,d1
  1372.  asr.l #1,d2
  1373.  
  1374.  sub.w d1,d0
  1375.  sub.w d1,d2
  1376.  sub.w d4,d3
  1377.  sub.w d4,d5
  1378.  muls d3,d2
  1379.  muls d5,d0
  1380.  sub.l d0,d2
  1381.  bge SHADpolybehind
  1382.  
  1383.  move.w #20000,d4    ; top
  1384.  move.w #-20000,d5    ; bottom
  1385.  move.l #UVCOORDS,a4
  1386.  
  1387. putinlinesSHAD:
  1388.  move.w (a1),d0
  1389.  move.w 4(a1),d1
  1390.  
  1391.  moveq #0,d2
  1392.  move.b 2(a1),d2    ; one end U
  1393.  move.w d2,2(a4,d0.w*4)
  1394.  move.b 3(a1),d2    ; one end V
  1395.  move.w d2,(a4,d0.w*4)
  1396.  move.b 6(a1),d2    ; two end U
  1397.  move.w d2,2(a4,d1.w*4)
  1398.  move.b 7(a1),d2    ; two end V
  1399.  move.w d2,(a4,d1.w*4)
  1400.  
  1401.  move.w d0,d2
  1402.  muls #10,d2
  1403.  move.w 8(a3,d2.w),d2    ; Z
  1404.  
  1405.  cmp.w d2,d4
  1406.  ble.s .oktop
  1407.  move.w d2,d4
  1408. .oktop
  1409.  cmp.w d2,d5
  1410.  bge.s .okbot
  1411.  move.w d2,d5
  1412. .okbot
  1413.  
  1414.  movem.l d4/d5/d7/a1/a3/a4,-(a7)
  1415.  bsr SIMPLESHADLINE
  1416.  movem.l (a7)+,d4/d5/d7/a1/a3/a4
  1417.  addq #4,a1
  1418.  dbra d7,putinlinesSHAD
  1419.  addq #4,a1
  1420.   
  1421.  move.w (a1)+,TEXTUREADD
  1422.  
  1423.  asr.w #2,d4
  1424.  asr.w #2,d5
  1425.  add.w #128,d4
  1426.  add.w #128,d5
  1427.  move.w d4,TOPLINE
  1428.  move.w d5,BOTLINE
  1429.  
  1430. * Now draw the shadow polygon....
  1431.  
  1432.  move.l #SHADOWBUFFER,a2
  1433.  move.l #LEFTUVS,a0
  1434.  move.w TOPLINE,d0
  1435.  move.w BOTLINE,d1
  1436.  sub.w d0,d1
  1437.  asl.w #3,d0
  1438.  add.w d0,a0
  1439.  muls #(256/8),d0
  1440.  add.l d0,a2    ; pointer to screen line.
  1441.  
  1442.  subq #1,d1
  1443.  blt NOPOLYGONSHAD
  1444.  
  1445. DOAHORLINESHAD:
  1446.  swap d1
  1447.  
  1448.  move.w RIGHTUVS-LEFTUVS(a0),d0
  1449.  move.w (a0)+,d7
  1450.  sub.w d7,d0
  1451.  blt NOPOLYGONSHAD
  1452.  
  1453.  move.l a2,-(a7)
  1454.  
  1455. ; asr.w #2,d0
  1456. ; asr.w #2,d7
  1457.  add.w d7,a2
  1458.  ext.l d0
  1459.  addq #1,d0
  1460.  
  1461.  move.w RIGHTUVS-LEFTUVS(a0),d7
  1462.  move.w (a0)+,d4
  1463.  swap d7
  1464.  clr.w d7
  1465.  swap d4
  1466.  clr.w d4
  1467.  sub.l d4,d7
  1468.  divs.l d0,d7
  1469.  move.l d7,a5
  1470.  
  1471.  move.w RIGHTUVS-LEFTUVS(a0),d7
  1472.  swap d7
  1473.  clr.w d7
  1474.  move.w (a0)+,d5
  1475.  swap d5
  1476.  clr.w d5
  1477.  sub.l d5,d7
  1478.  divs.l d0,d7
  1479.  move.l d7,a6
  1480.  
  1481.  move.w RIGHTUVS-LEFTUVS(a0),d7
  1482.  swap d7
  1483.  clr.w d7
  1484.  move.w (a0)+,d6
  1485.  swap d6
  1486.  clr.w d6
  1487.  sub.l d6,d7
  1488.  divs.l d0,d7
  1489.  move.l d7,a3
  1490.  
  1491.  move.l a0,-(a7)
  1492.  move.l d1,-(a7)
  1493.  move.l #TEXTURES,a0
  1494.  move.w TEXTUREADD,d7
  1495.  bge.s .okaddtes3
  1496.  and.w #$7fff,d7
  1497.  add.l #65536*2,a0
  1498. .okaddtes3:
  1499.  ext.l d7
  1500.  add.l d7,d7
  1501.  add.l d7,a0
  1502.  move.w #0,d7
  1503.  
  1504.  subq #1,d0
  1505.  
  1506. ; d0=xdist
  1507. ; d4=U  a5=DU
  1508. ; d5=V  a6=DV
  1509. ; d6=Y  a3=DY
  1510.  moveq #0,d1
  1511.  
  1512.  swap d6
  1513.  
  1514. PLOTADOT:
  1515.  
  1516. .across
  1517.  
  1518.  swap d4
  1519.  swap d5
  1520.  move.w d4,d2
  1521.  lsl.w #8,d2
  1522.  swap d4
  1523.  move.b d5,d2
  1524.  add.l a5,d4
  1525.  swap d5
  1526.  add.l a6,d5
  1527.  
  1528.  
  1529. ; swap d6
  1530. ; move.b (a2)+,d1
  1531. ; tst.b 1(a0,d2.w*8)
  1532. ; beq.s .noplottt
  1533.  move.b d6,(a2)+
  1534.  
  1535.  dbra d0,.across
  1536.  bra.s .plaster
  1537.  
  1538. .noplottt:
  1539.  addq #1,a2
  1540.  dbra d0,.across
  1541.  
  1542. .plaster:
  1543.  
  1544.  move.l (a7)+,d1
  1545.  move.l (a7)+,a0
  1546.  move.l (a7)+,a2
  1547.  
  1548. .noline:
  1549.  add.w #256,a2
  1550.  
  1551.  swap d1
  1552.  dbra d1,DOAHORLINESHAD
  1553.  
  1554. NOPOLYGONSHAD:
  1555.  
  1556. SHADpolybehind:
  1557.  rts
  1558.  
  1559.  
  1560. ************************************************
  1561.  
  1562. LU: dc.w 0
  1563. LV: dc.w 0
  1564. RU: dc.w 0
  1565. RV: dc.w 0
  1566.     
  1567. SIMPLESHADLINE:
  1568.  move.l #SHADOWPTS,a1
  1569.  
  1570.  move.l #UVCOORDS,a2
  1571.  move.w (a2,d0.w*4),LU
  1572.  move.w 2(a2,d0.w*4),LV
  1573.  move.w (a2,d1.w*4),RU
  1574.  move.w 2(a2,d1.w*4),RV
  1575.  
  1576.  muls #10,d0
  1577.  muls #10,d1
  1578.  move.w 8(a1,d0.w),d2        ;fz
  1579.  move.w 8(a1,d1.w),d7        ;sz
  1580.  ext.l d2
  1581.  ext.l d7
  1582.  
  1583.  move.l #LEFTUVS,a3
  1584.  asr.l #2,d2
  1585.  asr.l #2,d7
  1586.  cmp.l d2,d7 
  1587.  beq .noline
  1588.  
  1589.  bgt.s .lineonright
  1590. .lineonleft:
  1591.  move.l #RIGHTUVS,a3
  1592.  exg d0,d1
  1593.  exg d2,d7
  1594.  
  1595.  move.l LU,d5
  1596.  move.l RU,LU
  1597.  move.l d5,RU
  1598.  
  1599. .lineonright:
  1600.  
  1601.  sub.w d2,d7
  1602.  add.w #128,d2
  1603.  lea (a3,d2.w*8),a3
  1604.  
  1605.  move.w d7,YDIFF
  1606.  
  1607.  move.l (a1,d0.w),d3        ;fx
  1608.  move.l (a1,d1.w),d7        ;sx
  1609.  
  1610.  asl.l #5,d3
  1611.  asl.l #5,d7
  1612.  
  1613.  sub.l d3,d7
  1614.  divs.l YDIFF-2,d7
  1615.  move.l d7,a0    ; dx
  1616.  
  1617.  move.l #ROTATEDPTS,a1
  1618.  
  1619.  move.w LU,d4
  1620.  move.w LV,d5
  1621.  move.w RU,d6
  1622.  move.w RV,d7
  1623.  
  1624.  sub.w d4,d6
  1625.  sub.w d5,d7
  1626.  swap d4
  1627.  swap d5
  1628.  clr.w d4
  1629.  clr.w d5
  1630.  swap d6
  1631.  swap d7
  1632.  clr.w d6
  1633.  clr.w d7
  1634.  
  1635.  divs.l YDIFF-2,d6
  1636.  divs.l YDIFF-2,d7
  1637.  
  1638.  move.l d6,a4
  1639.  move.l d7,a5
  1640.  
  1641. ; asl.w #4,d0
  1642. ; asl.w #4,d1
  1643.  
  1644.  move.l 4(a1,d0.w),d6
  1645.  move.l 4(a1,d1.w),d7
  1646.  asl.l #5,d6
  1647.  asl.l #5,d7
  1648.  sub.l d6,d7
  1649.  divs.l YDIFF-2,d7
  1650.  exg d7,a6
  1651.  exg d7,d6
  1652.  
  1653.  move.l YDIFF-2,d1
  1654.  subq #1,d1
  1655.  
  1656. ; d3=x a0=dx
  1657. ; d4=u a4=du
  1658. ; d5=v a5=dv
  1659. ; d7=y a6=dy
  1660. ; d1=dz
  1661.  
  1662.  move.w HIGHPOLY,d7
  1663.  
  1664.  add.l #128*65536,d3
  1665. ; add.l #128*65536,d7
  1666.  
  1667. .PUTINLINE:
  1668.  swap d3
  1669.  move.w d3,(a3)+
  1670.  swap d3
  1671.  add.l a0,d3
  1672.  swap d4
  1673.  move.w d4,(a3)+
  1674.  swap d4
  1675.  swap d5
  1676.  add.l a4,d4
  1677.  move.w d5,(a3)+
  1678.  swap d5
  1679.  add.l a5,d5
  1680. ; swap d7
  1681.  move.w d7,(a3)+
  1682. ; swap d7
  1683. ; add.l a6,d7
  1684.  dbra d1,.PUTINLINE
  1685.  
  1686. .noline:
  1687.  rts
  1688.  
  1689.  
  1690. **************************************************
  1691.  
  1692. doapoly:
  1693.  
  1694.  move.w (a1)+,d7    ; sides to draw
  1695.  addq #2,a1        ; avoid holes
  1696.  move.w 12(a1,d7.w*4),pregour
  1697.  
  1698.  move.l #ONSCREENPTS,a3
  1699.  
  1700.  move.w (a1),d0
  1701.  move.w 4(a1),d1
  1702.  move.w 8(a1),d2
  1703.  move.w 2(a3,d0.w*4),d3
  1704.  move.w 2(a3,d1.w*4),d4
  1705.  move.w 2(a3,d2.w*4),d5
  1706.  move.w (a3,d0.w*4),d0
  1707.  move.w (a3,d1.w*4),d1
  1708.  move.w (a3,d2.w*4),d2
  1709.  
  1710.  sub.w d1,d0
  1711.  sub.w d1,d2
  1712.  sub.w d4,d3
  1713.  sub.w d4,d5
  1714.  muls d3,d2
  1715.  muls d5,d0
  1716.  sub.l d0,d2
  1717.  ble polybehind
  1718.  
  1719.  move.w #20000,d4    ; top
  1720.  move.w #-20000,d5    ; bottom
  1721.  move.l #UVCOORDS,a4
  1722.  
  1723.  move.l a1,a0
  1724.  
  1725. putinlines:
  1726.  move.w (a1),d0
  1727.  move.w 4(a1),d1
  1728.  
  1729.  moveq #0,d2
  1730.  move.b 2(a1),d2    ; one end U
  1731.  move.w d2,2(a4,d0.w*4)
  1732.  move.b 3(a1),d2    ; one end V
  1733.  move.w d2,(a4,d0.w*4)
  1734.  move.b 6(a1),d2    ; two end U
  1735.  move.w d2,2(a4,d1.w*4)
  1736.  move.b 7(a1),d2    ; two end V
  1737.  move.w d2,(a4,d1.w*4)
  1738.  
  1739.  move.w 2(a3,d0.w*4),d2    ; Z
  1740.  
  1741.  cmp.w d2,d4
  1742.  ble.s .oktop
  1743.  move.w d2,d4
  1744. .oktop
  1745.  cmp.w d2,d5
  1746.  bge.s .okbot
  1747.  move.w d2,d5
  1748. .okbot
  1749.  
  1750.  movem.l a0/d4/d5/d7/a1/a3/a4,-(a7)
  1751.  jsr SIMPLECALCLINE
  1752.  movem.l (a7)+,a0/d4/d5/d7/a1/a3/a4
  1753.  addq #4,a1
  1754.  dbra d7,putinlines
  1755.  addq #4,a1 
  1756.  
  1757.  move.w (a1)+,TEXTUREADD
  1758.  
  1759.  asr.w #2,d4
  1760.  asr.w #2,d5
  1761. ; add.w #128,d4
  1762. ; add.w #128,d5
  1763.  move.w d4,TOPLINE
  1764.  move.w d5,BOTLINE
  1765.   
  1766.  move.l #SHADOWPTS,a1
  1767.  move.w (a0),d0
  1768.  move.w 4(a0),d1
  1769.  move.w 8(a0),d2
  1770.  
  1771. CHECKVALS:
  1772.  
  1773.  muls #10,d0
  1774.  muls #10,d1
  1775.  muls #10,d2
  1776.  
  1777.  lea (a1,d0.w),a0
  1778.  lea (a1,d2.w),a2
  1779.  lea (a1,d1.w),a1
  1780.  
  1781.  move.l (a0),d3
  1782.  sub.l (a1),d3
  1783.  asr.l #8,d3
  1784.  asr.l #1,d3
  1785.  move.l 4(a0),d4
  1786.  sub.l 4(a1),d4
  1787.  asr.l #8,d4
  1788.  asr.l #1,d4
  1789.  move.w 8(a0),d5
  1790.  sub.w 8(a1),d5
  1791.  
  1792.  move.w d3,d6
  1793.  muls d6,d6
  1794.  move.w d4,d7
  1795.  muls d7,d7
  1796.  add.l d7,d6
  1797.  move.w d5,d7
  1798.  muls d7,d7
  1799.  add.l d7,d6
  1800.  move.l d6,d2
  1801.  jsr CALCSQROOT
  1802.  move.w d2,LEN1
  1803.  
  1804.  move.l (a2),d0
  1805.  sub.l (a1),d0
  1806.  asr.l #8,d0
  1807.  asr.l #1,d0
  1808.  move.l 4(a2),d1
  1809.  sub.l 4(a1),d1
  1810.  asr.l #8,d1
  1811.  asr.l #1,d1
  1812.  move.w 8(a2),d2
  1813.  sub.w 8(a1),d2
  1814.  
  1815.  muls d2,d3
  1816.  muls d0,d5
  1817.  sub.l d3,d5    ; length
  1818.  muls.l #$4c,d5
  1819.  
  1820.  muls d0,d0
  1821.  muls d1,d1
  1822.  muls d2,d2
  1823.  add.l d0,d1
  1824.  add.l d1,d2
  1825.  jsr CALCSQROOT
  1826.  
  1827.  muls LEN1,d2
  1828.  bgt.s .ok
  1829.  moveq #1,d2
  1830. .ok
  1831.  
  1832.  divs.l d2,d5
  1833.  
  1834.  add.l #16,d5
  1835.  
  1836.  tst.l d5
  1837.  ble.s .okbr
  1838.  moveq #0,d5
  1839. .okbr:
  1840.  add.w #$5c,d5
  1841.  bge.s .okbr2
  1842.  moveq #0,d5
  1843. .okbr2:
  1844.  
  1845.  move.w d5,d0
  1846.  
  1847.  asl.w #8,d5
  1848.  move.w d5,BRIGHTNESS+2
  1849.  
  1850.  sub.w #$5c,d0
  1851.  asr.w #1,d0
  1852.  add.w #$5c,d0
  1853.  asl.w #8,d0
  1854.  move.w d0,BRIGHTNESS
  1855.  
  1856.  
  1857. ***********************************************
  1858. * Draw the polygon (shadowed).
  1859.  
  1860.  move.l FASTBUFFER,a2
  1861.  move.l #LEFTUVS,a0
  1862.  move.w TOPLINE,d0
  1863.  move.w BOTLINE,d1
  1864.  sub.w d0,d1
  1865.  asl.w #4,d0
  1866.  add.w d0,a0
  1867.  muls #(320/16),d0
  1868.  add.l d0,a2    ; pointer to screen line.
  1869.  
  1870.  subq #1,d1
  1871.  blt NOPOLYGON
  1872.  
  1873.  tst.b Gouraud
  1874.  bne GOURPOLY
  1875.  
  1876. DOAHORLINE:
  1877.  swap d1
  1878.  
  1879.  move.w RIGHTUVS-LEFTUVS(a0),d0
  1880.  move.w (a0)+,d7
  1881.  asr.w #2,d0
  1882.  asr.w #2,d7
  1883.  sub.w d7,d0
  1884.  bge.s .okflibble
  1885.  
  1886.  add.w #14,a0
  1887.  add.w #320,a2
  1888.  swap d1
  1889.  dbra d1,DOAHORLINE
  1890.  bra NOPOLYGON
  1891.  
  1892. .okflibble:
  1893.  
  1894.  move.l a2,-(a7)
  1895.  
  1896.  add.w d7,a2
  1897.  ext.l d0
  1898.  addq #1,d0
  1899.  
  1900.  move.l RIGHTUVS-LEFTUVS(a0),d7
  1901.  move.l (a0)+,d2 
  1902.  sub.l d2,d7
  1903.  divs.l d0,d7
  1904.  move.l d7,a1
  1905.  
  1906.  
  1907.  
  1908.  
  1909.  
  1910.  
  1911.  
  1912.  
  1913.  
  1914.  
  1915.  
  1916.  
  1917.  
  1918.  
  1919.  
  1920.  
  1921.  
  1922.  
  1923.  move.l RIGHTUVS-LEFTUVS(a0),d7 
  1924.  move.l (a0)+,d3 
  1925.  
  1926.  
  1927.  
  1928.  
  1929.  
  1930.  
  1931.  
  1932.  
  1933.  
  1934.  
  1935.  
  1936.  
  1937.  
  1938.  
  1939.  
  1940.  
  1941.  
  1942.  
  1943.  
  1944.  
  1945.  sub.l d3,d7
  1946.  divs.l d0,d7
  1947.  move.l d7,a4
  1948.  
  1949.  move.w RIGHTUVS-LEFTUVS(a0),d7
  1950.  move.w (a0)+,d4
  1951.  swap d7
  1952.  clr.w d7
  1953.  swap d4
  1954.  clr.w d4
  1955.  sub.l d4,d7
  1956.  divs.l d0,d7
  1957.  move.l d7,a5
  1958.  
  1959.  move.w RIGHTUVS-LEFTUVS(a0),d7
  1960.  swap d7
  1961.  clr.w d7
  1962.  move.w (a0)+,d5
  1963.  swap d5
  1964.  clr.w d5
  1965.  sub.l d5,d7
  1966.  divs.l d0,d7
  1967.  move.l d7,a6
  1968.  
  1969.  move.w RIGHTUVS-LEFTUVS(a0),d7
  1970.  swap d7
  1971.  clr.w d7
  1972.  move.w (a0)+,d6
  1973.  swap d6
  1974.  clr.w d6
  1975.  sub.l d6,d7
  1976.  divs.l d0,d7
  1977.  move.l d7,a3
  1978.  
  1979.  move.l a0,-(a7)
  1980.  move.l d1,-(a7)
  1981.  move.l #TEXTURES,a0
  1982.  move.w TEXTUREADD,d7
  1983.  bge.s .okaddtes3
  1984.  and.w #$7fff,d7
  1985.  add.l #65536*2,a0
  1986. .okaddtes3:
  1987.  ext.l d7
  1988.  add.l d7,d7
  1989.  add.l d7,a0
  1990.  move.w #0,d7
  1991.  
  1992.  move.l BRIGHTNESS,a6
  1993.  
  1994.  move.l a7,SAVESTACK
  1995.  move.l #SHADOWBUFFER,a7
  1996.  
  1997.  subq #1,d0
  1998.  
  1999. ; d0=xdist
  2000. ; d2=U    a1=DU
  2001. ; d3=V  a4=DV
  2002. ; d4=X  a5=DX
  2003. ; d5=Y  a6=DY
  2004. ; d6=Z  a3=DZ
  2005.  move.w HIGHPOLY,d5
  2006.  
  2007.  moveq #0,d1
  2008.  swap d6
  2009.  move.w d6,d1
  2010.  lsl.w #8,d1
  2011.  swap d4
  2012.  move.b d4,d1
  2013.  swap d4
  2014.  swap d6
  2015.  
  2016.  moveq #0,d7
  2017.  move.b (a7,d1.l),d7
  2018.  cmp.w d7,d5
  2019.  ble INTHELIGHT
  2020.  bra.s INTHEDARK
  2021.  
  2022. PENUMBRA:
  2023.  moveq #0,d1
  2024.  swap d6
  2025.  move.w d6,d1
  2026.  lsl.w #8,d1
  2027.  swap d4
  2028.  move.b d4,d1
  2029.  swap d4
  2030.  swap d6
  2031.  add.l a5,d4
  2032.  add.l a3,d6
  2033.  
  2034.      moveq #0,d7
  2035.  move.b (a7,d1.l),d7
  2036.  cmp.w d7,d5
  2037.  ble INTOLIGHT
  2038.  bra.s INTODARK
  2039.  
  2040.  
  2041. INTHEDARK:
  2042.  moveq #0,d1
  2043.  swap d6
  2044.  move.w d6,d1
  2045.  lsl.w #8,d1
  2046.  swap d4
  2047.  move.b d4,d1
  2048.  swap d4
  2049.  swap d6
  2050.  add.l a5,d4
  2051.  add.l a3,d6
  2052.  
  2053.  moveq #0,d7
  2054.  move.b (a7,d1.l),d7
  2055.  cmp.w d7,d5
  2056.  ble.s INTOPENUM
  2057. INTODARK:
  2058.  move.w #$5c00,d7
  2059.  swap d2
  2060.  move.w d2,d1
  2061.  asl.w #8,d1
  2062.  swap d3
  2063.  move.b d3,d1
  2064.  swap d2
  2065.  swap d3
  2066.  add.l a1,d2
  2067.  add.l a4,d3
  2068.  
  2069. ; move.b (a0,d1.w*4),d7
  2070. ; beq.s .noplottt
  2071.  
  2072.  move.b TEXTUREPAL-256(pc,d7.w),(a2)+
  2073.  dbra d0,INTHEDARK
  2074.  bra.s PASTAC 
  2075.  
  2076. .noplottt
  2077.  addq #1,a2
  2078.  dbra d0,INTHEDARK
  2079.  bra.s PASTAC
  2080.  
  2081. INTOPENUM:
  2082.  move.l a6,d7
  2083.  swap d7
  2084.  swap d2
  2085.  move.w d2,d1
  2086.  asl.w #8,d1
  2087.  swap d3
  2088.  move.b d3,d1
  2089.  swap d2
  2090.  swap d3
  2091.  add.l a1,d2
  2092.  add.l a4,d3
  2093.  
  2094. ; move.b (a0,d1.w*4),d7
  2095. ; beq.s .noplottt
  2096.  
  2097.  move.b TEXTUREPAL(pc,d7.w),(a2)+
  2098.  dbra d0,PENUMBRA
  2099.  bra.s PASTAC 
  2100.  
  2101. .noplottt
  2102.  addq #1,a2
  2103.  dbra d0,PENUMBRA
  2104.  bra.s PASTAC
  2105.  
  2106. INTHELIGHT:
  2107.  
  2108.  moveq #0,d1
  2109.  swap d6
  2110.  move.w d6,d1
  2111.  lsl.w #8,d1
  2112.  swap d4
  2113.  move.b d4,d1
  2114.  swap d4
  2115.  swap d6
  2116.  add.l a5,d4
  2117.  add.l a3,d6
  2118.  
  2119.  moveq #0,d7
  2120.  move.b (a7,d1.l),d7
  2121.  cmp.w d7,d5
  2122.  bgt.s INTOPENUM
  2123. INTOLIGHT:
  2124.  move.w a6,d7
  2125.  swap d2
  2126.  move.w d2,d1
  2127.  asl.w #8,d1
  2128.  swap d3
  2129.  move.b d3,d1
  2130.  swap d2
  2131.  swap d3
  2132.  add.l a1,d2
  2133.  add.l a4,d3
  2134.  
  2135. ; move.b (a0,d1.w*4),d7
  2136. ; beq.s .noplottt
  2137.  
  2138.  move.b TEXTUREPAL(pc,d7.w),(a2)+
  2139.  dbra d0,INTHELIGHT
  2140.  bra.s PASTAC 
  2141.  
  2142. .noplottt:
  2143.  addq #1,a2
  2144.  dbra d0,INTHELIGHT
  2145.  
  2146. PASTAC
  2147.  
  2148.  move.l SAVESTACK,a7
  2149.  
  2150.  move.l (a7)+,d1
  2151.  move.l (a7)+,a0
  2152.  move.l (a7)+,a2
  2153.  
  2154. .noline:
  2155.  add.w #320,a2
  2156.  
  2157.  swap d1
  2158.  dbra d1,DOAHORLINE
  2159.  
  2160.  
  2161.  bra NOPOLYGON
  2162.  
  2163. TEXTUREPAL: incbin "ab3:includes/shadow.pal"
  2164.  
  2165. SAVESTACK: dc.l 0
  2166. HIGHPOLY: dc.w 0
  2167. LEN1: dc.w 0
  2168. BRIGHTNESS: dc.l 0
  2169. TRANSTEXT: dc.w 0
  2170. AANG: dc.w 0
  2171. BANG: dc.w 0
  2172. CANG: dc.w 0
  2173. DANG: dc.w 0
  2174.  
  2175. NOPOLYGON:
  2176. polybehind:
  2177.  rts
  2178.  
  2179.  
  2180. GOURPOLY: 
  2181.  
  2182. DOAHORLINEGOUR:
  2183.  swap d1
  2184.  
  2185.  move.w RIGHTUVS-LEFTUVS(a0),d0
  2186.  move.w (a0)+,d7
  2187.  asr.w #2,d0
  2188.  asr.w #2,d7
  2189.  sub.w d7,d0
  2190.  bge.s .okflibble
  2191.  
  2192.  add.w #14,a0
  2193.  add.w #320,a2
  2194.  swap d1
  2195.  dbra d1,DOAHORLINEGOUR
  2196.  bra NOPOLYGON
  2197.  
  2198. .okflibble:
  2199.  
  2200.  move.l a2,-(a7)
  2201.  
  2202.  add.w d7,a2
  2203.  ext.l d0
  2204.  addq #1,d0
  2205.  
  2206.  move.b RIGHTUVS-LEFTUVS(a0),d3
  2207.  move.b (a0),d2
  2208.  ext.w d3
  2209.  ext.w d2
  2210.  
  2211.  tst.w d2
  2212.  blt .firsttowards
  2213.  
  2214.  bgt .firstaway
  2215.  tst.w d3
  2216.  blt .bothtowards
  2217.  bra .bothaway
  2218.  
  2219. .firsttowards:
  2220.  tst.w d3
  2221.  ble .bothtowards
  2222.  
  2223. ; First is towards and second away...
  2224.  
  2225.  move.w d0,d7    ; total length
  2226.  move.w d0,d6
  2227.  neg.w d2
  2228.  add.w d2,d3
  2229.  muls d2,d6
  2230.  divs d3,d6    ; length of first bit
  2231.  sub.w d6,d7    ; length of second bit
  2232.  move.w d6,FIRSTLEN
  2233.  move.w d7,LASTLEN
  2234.  
  2235.  tst.w FIRSTLEN
  2236.  beq .bothaway
  2237.  tst.w LASTLEN
  2238.  beq .bothtowards
  2239.  
  2240.  moveq #0,d2
  2241.  moveq #0,d3
  2242.  moveq #0,d4
  2243.  moveq #0,d5
  2244.  move.b 6(a0),d2
  2245.  move.b 7(a0),d3
  2246.  
  2247.  move.w d2,FIRSTU
  2248.  move.w d3,FIRSTV
  2249.  
  2250.  move.w d2,d4
  2251.  move.w d3,d5
  2252.  sub.w #128,d2
  2253.  sub.w #128,d3
  2254.  muls d2,d2
  2255.  muls d3,d3
  2256.  add.l d3,d2
  2257.  jsr CALCSQROOT
  2258.  
  2259.  tst.w d2
  2260.  beq.s .nochng
  2261.  
  2262.  sub.w #128,d4
  2263.  sub.w #128,d5
  2264.  muls #127,d4
  2265.  muls #127,d5
  2266.  divs d2,d4
  2267.  divs d2,d5
  2268.  add.w #128,d4
  2269.  add.w #128,d5
  2270.  
  2271. .nochng:
  2272.  
  2273.  move.w d4,MIDU
  2274.  move.w d5,MIDV
  2275.  
  2276.  move.b 6+RIGHTUVS-LEFTUVS(a0),d4
  2277.  move.b 7+RIGHTUVS-LEFTUVS(a0),d5
  2278.  move.w d4,SECU
  2279.  move.w d5,SECV
  2280.  
  2281.  move.w d4,d2
  2282.  move.w d5,d3
  2283.  
  2284.  sub.w #128,d2
  2285.  sub.w #128,d3
  2286.  muls d2,d2
  2287.  muls d3,d3
  2288.  add.l d3,d2
  2289.  jsr CALCSQROOT
  2290.  
  2291.  tst.w d2
  2292.  beq.s .nochng2
  2293.  
  2294.  sub.w #128,d4
  2295.  sub.w #128,d5
  2296.  muls #127,d4
  2297.  muls #127,d5
  2298.  divs d2,d4
  2299.  divs d2,d5
  2300.  add.w #128,d4
  2301.  add.w #128,d5
  2302.  
  2303. .nochng2:
  2304.  
  2305.  add.w MIDU,d4
  2306.  add.w MIDV,d5
  2307.  asr.w #1,d4
  2308.  asr.w #1,d5
  2309.  move.w d4,MIDU
  2310.  move.w d5,MIDV 
  2311.  
  2312.  move.l RIGHTUVS-LEFTUVS(a0),d7
  2313.  move.l (a0)+,d2 
  2314.  
  2315.  and.l #$ffffff,d2
  2316.  and.l #$ffffff,d7
  2317.  
  2318.  moveq #0,d3
  2319.  moveq #0,d5
  2320.  move.w d2,d3
  2321.  move.w d7,d5
  2322.  swap d3
  2323.  swap d5
  2324.  sub.l d3,d5
  2325.  divs.l d0,d5
  2326.  asr.l #8,d5
  2327.  move.w d5,RIGHTBRIGHT
  2328.  asr.l #8,d3
  2329.  move.w d3,LEFTBRIGHT
  2330.  
  2331.  clr.w d2
  2332.  clr.w d7
  2333.  sub.l d2,d7
  2334.  asl.l #8,d2
  2335.  divs.l d0,d7
  2336.  asl.l #8,d7
  2337.  
  2338.  move.l RIGHTUVS-LEFTUVS(a0),d6 
  2339.  move.l (a0)+,d3
  2340.  
  2341.  moveq #0,d4
  2342.  moveq #0,d5
  2343.  
  2344. ; move.w d6,d5
  2345. ; move.w d3,d4
  2346. ; move.b #0,d4
  2347. ; move.b #0,d5
  2348.  
  2349.  move.w FIRSTU,d4
  2350.  move.w MIDU,d5
  2351.  lsl.l #8,d4
  2352.  lsl.l #8,d5
  2353.  
  2354.  sub.l d4,d5
  2355.  divs.l FIRSTLEN-2,d5
  2356.  
  2357.  move.w d4,d2
  2358.  move.w d5,d7
  2359.  move.l d7,a1
  2360.  moveq #0,d4
  2361.  moveq #0,d5
  2362.  
  2363. ; move.b d6,d5
  2364. ; move.b d3,d4
  2365.  
  2366. ; swap d5
  2367. ; swap d4
  2368.  
  2369.  move.w FIRSTV,d4
  2370.  move.w MIDV,d5
  2371.  swap d4
  2372.  swap d5
  2373.  
  2374.  sub.l d4,d5
  2375.  divs.l FIRSTLEN-2,d5
  2376.  
  2377.  move.l d5,a3
  2378.  move.l d4,d5
  2379.   
  2380.  clr.w d3
  2381.  clr.w d6
  2382.  sub.l d3,d6
  2383.  divs.l d0,d6
  2384.  move.l d6,a4
  2385.  
  2386.  move.w RIGHTUVS-LEFTUVS(a0),d7
  2387.  move.w (a0)+,d4
  2388.  swap d7
  2389.  clr.w d7
  2390.  swap d4
  2391.  clr.w d4
  2392.  sub.l d4,d7
  2393.  divs.l d0,d7
  2394.  move.l d7,a5
  2395.  
  2396. ; move.w RIGHTUVS-LEFTUVS(a0),d7
  2397. ; swap d7
  2398. ; clr.w d7
  2399.  move.w (a0)+,d7
  2400. ; swap d5
  2401. ; clr.w d5
  2402. ; sub.l d5,d7
  2403. ; divs.l d0,d7
  2404. ; move.l d7,a6
  2405.  
  2406.  move.w RIGHTUVS-LEFTUVS(a0),d7
  2407.  swap d7
  2408.  clr.w d7
  2409.  move.w (a0)+,d6
  2410.  swap d6
  2411.  clr.w d6
  2412.  sub.l d6,d7
  2413.  divs.l d0,d7
  2414.  
  2415.  lsl.l #8,d6
  2416.  lsl.l #8,d7
  2417.  
  2418.  move.w RIGHTBRIGHT,d7
  2419.  move.l d7,a6
  2420.  
  2421.  move.l a0,-(a7)
  2422.  move.l d1,-(a7)
  2423.  move.l #TEXTURES,a0
  2424.  move.w TEXTUREADD,d7
  2425.  bge.s .okaddtes3
  2426.  and.w #$7fff,d7
  2427.  add.l #65536*2,a0
  2428. .okaddtes3:
  2429.  ext.l d7
  2430.  add.l d7,d7
  2431.  add.l d7,a0
  2432.  move.w #0,d7
  2433.  
  2434.  move.w LEFTBRIGHT,d6
  2435.  
  2436.  subq #1,d0
  2437.  swap d0
  2438.  move.w HIGHPOLY,d0
  2439.  swap d0
  2440.  
  2441.  
  2442. ; d0=xdist
  2443. ; d2=U    a1=DU
  2444. ; d3=V  a4=DV
  2445. ; d4=X  a5=DX
  2446. ; d5=Y  a6=DY
  2447. ; d6=Z  a3=DZ
  2448.  
  2449. ; d0= polynum : polynum : counter : counter
  2450. ; d1= scratch : scratch : scratch : scratch
  2451. ; d2= u : uacc : sv : svacc
  2452. ; d3= v : v : vacc : vacc
  2453. ; d4= x : x : xacc : xacc
  2454. ; d5= su : su : suacc : suacc
  2455. ; d6= z : zacc : bright : brightacc
  2456. ; d7= scratch : scratch : scratch : scratch
  2457.  
  2458. ; a0= textures
  2459. ; a1= uspeed : uspeed : suspeed : suspeed
  2460. ; a2= screen pointer
  2461. ; a3= svspeed : svspeed : svspeed : svspeed
  2462. ; a4= vspeed : vspeed : vspeed : vspeed
  2463. ; a5= xspeed : xspeed : xspeed : xspeed
  2464. ; a6= zspeed : zspeed :brightspeed : brightspeed
  2465. ; a7= shadowmap pointer
  2466.  
  2467.  
  2468.  move.w FIRSTLEN,d0
  2469.  sub.w #1,d0
  2470.  bsr STARTLINE
  2471.  
  2472.  move.l #0,d5
  2473.  move.w #0,d2
  2474.  move.l #0,a3
  2475.  
  2476.  move.w LASTLEN,d0
  2477.  sub.w #1,d0
  2478.  
  2479.  bsr STARTLINE
  2480.  
  2481.  
  2482.  move.l (a7)+,d1
  2483.  move.l (a7)+,a0
  2484.  move.l (a7)+,a2
  2485.  
  2486.  bra .noline
  2487.  
  2488. .firstaway:
  2489.  tst.w d3
  2490.  bge .bothaway
  2491.  
  2492.  
  2493. ; first is away and second is towards...
  2494.  
  2495. ; this really isn't going to work...
  2496.  
  2497.  move.w d0,d7    ; total length
  2498.  move.w d0,d6
  2499.  neg.w d3
  2500.  add.w d2,d3
  2501.  muls d2,d6
  2502.  divs d3,d6    ; length of first bit
  2503.  sub.w d6,d7    ; length of second bit
  2504.  move.w d6,FIRSTLEN
  2505.  move.w d7,LASTLEN
  2506.  
  2507.  tst.w FIRSTLEN
  2508.  beq .bothaway
  2509.  tst.w LASTLEN
  2510.  beq .bothtowards
  2511.  
  2512.  moveq #0,d2
  2513.  moveq #0,d3
  2514.  moveq #0,d4
  2515.  moveq #0,d5
  2516.  move.b 6(a0),d2
  2517.  move.b 7(a0),d3
  2518.  
  2519.  move.w d2,FIRSTU
  2520.  move.w d3,FIRSTV
  2521.  
  2522.  move.w d2,d4
  2523.  move.w d3,d5
  2524.  sub.w #128,d2
  2525.  sub.w #128,d3
  2526.  muls d2,d2
  2527.  muls d3,d3
  2528.  add.l d3,d2
  2529.  jsr CALCSQROOT
  2530.  
  2531.  tst.w d2
  2532.  beq.s .nochng22
  2533.  
  2534.  sub.w #128,d4
  2535.  sub.w #128,d5
  2536.  muls #127,d4
  2537.  muls #127,d5
  2538.  divs d2,d4
  2539.  divs d2,d5
  2540.  add.w #128,d4
  2541.  add.w #128,d5
  2542.  
  2543. .nochng22:
  2544.  
  2545.  move.w d4,MIDU
  2546.  move.w d5,MIDV
  2547.  
  2548.  moveq #0,d4
  2549.  moveq #0,d5
  2550.  move.b 6+RIGHTUVS-LEFTUVS(a0),d4
  2551.  move.b 7+RIGHTUVS-LEFTUVS(a0),d5
  2552.  move.w d4,SECU
  2553.  move.w d5,SECV
  2554.  
  2555.  move.w d4,d2
  2556.  move.w d5,d3
  2557.  
  2558.  sub.w #128,d2
  2559.  sub.w #128,d3
  2560.  muls d2,d2
  2561.  muls d3,d3
  2562.  add.l d3,d2
  2563.  jsr CALCSQROOT
  2564.  
  2565.  tst.w d2
  2566.  beq.s .nochng222
  2567.  
  2568.  sub.w #128,d4
  2569.  sub.w #128,d5
  2570.  muls #127,d4
  2571.  muls #127,d5
  2572.  divs d2,d4
  2573.  divs d2,d5
  2574.  add.w #128,d4
  2575.  add.w #128,d5
  2576.  
  2577. .nochng222:
  2578.  
  2579.  add.w MIDU,d4
  2580.  add.w MIDV,d5
  2581.  asr.w #1,d4
  2582.  asr.w #1,d5
  2583.  move.w d4,MIDU
  2584.  move.w d5,MIDV
  2585.  
  2586.  
  2587.  move.l RIGHTUVS-LEFTUVS(a0),d7
  2588.  move.l (a0)+,d2 
  2589.  
  2590.  and.l #$ffffff,d2
  2591.  and.l #$ffffff,d7
  2592.  
  2593.  moveq #0,d3
  2594.  moveq #0,d5
  2595.  move.w d2,d3
  2596.  move.w d7,d5
  2597.  swap d3
  2598.  swap d5
  2599.  sub.l d3,d5
  2600.  divs.l d0,d5
  2601.  asr.l #8,d5
  2602.  move.w d5,RIGHTBRIGHT
  2603.  asr.l #8,d3
  2604.  move.w d3,LEFTBRIGHT
  2605.  
  2606.  clr.w d2
  2607.  clr.w d7
  2608.  sub.l d2,d7
  2609.  asl.l #8,d2
  2610.  divs.l d0,d7
  2611.  asl.l #8,d7
  2612.  
  2613.  move.l RIGHTUVS-LEFTUVS(a0),d6 
  2614.  move.l (a0)+,d3
  2615.  
  2616.  moveq #0,d4
  2617.  moveq #0,d5
  2618.  
  2619.  move.w MIDU,d4
  2620.  move.w SECU,d5
  2621.  lsl.w #8,d4
  2622.  lsl.w #8,d5
  2623.  
  2624. ; move.w d6,d5
  2625. ; move.w d3,d4
  2626. ; move.b #0,d4
  2627. ; move.b #0,d5
  2628.  
  2629.  sub.l d4,d5
  2630.  divs.l LASTLEN-2,d5
  2631.  
  2632.  move.w d4,d2
  2633.  move.w d5,d7
  2634.  move.l d7,a1
  2635.  moveq #0,d4
  2636.  moveq #0,d5
  2637.  
  2638.  move.w MIDV,d4
  2639.  move.w SECV,d5
  2640.  
  2641.  swap d5
  2642.  swap d4
  2643.  
  2644.  sub.l d4,d5
  2645.  divs.l LASTLEN-2,d5
  2646.  
  2647.  move.l d5,a3
  2648.  move.l d4,d5
  2649.  
  2650.  clr.w d3
  2651.  clr.w d6
  2652.  sub.l d3,d6
  2653.  divs.l d0,d6
  2654.  move.l d6,a4
  2655.  
  2656.  move.w RIGHTUVS-LEFTUVS(a0),d7
  2657.  move.w (a0)+,d4
  2658.  swap d7
  2659.  clr.w d7
  2660.  swap d4
  2661.  clr.w d4
  2662.  sub.l d4,d7
  2663.  divs.l d0,d7
  2664.  move.l d7,a5
  2665.  
  2666. ; move.w RIGHTUVS-LEFTUVS(a0),d7
  2667. ; swap d7
  2668. ; clr.w d7
  2669.  move.w (a0)+,d7
  2670. ; swap d5
  2671. ; clr.w d5
  2672. ; sub.l d5,d7
  2673. ; divs.l d0,d7
  2674. ; move.l d7,a6
  2675.  
  2676.  move.w RIGHTUVS-LEFTUVS(a0),d7
  2677.  swap d7
  2678.  clr.w d7
  2679.  move.w (a0)+,d6
  2680.  swap d6
  2681.  clr.w d6
  2682.  sub.l d6,d7
  2683.  divs.l d0,d7
  2684.  
  2685.  lsl.l #8,d6
  2686.  lsl.l #8,d7
  2687.  
  2688.  move.w RIGHTBRIGHT,d7
  2689.  move.l d7,a6
  2690.  
  2691.  move.l a0,-(a7)
  2692.  move.l d1,-(a7)
  2693.  move.l #TEXTURES,a0
  2694.  move.w TEXTUREADD,d7
  2695.  bge.s .okaddtes4
  2696.  and.w #$7fff,d7
  2697.  add.l #65536*2,a0
  2698. .okaddtes4:
  2699.  ext.l d7
  2700.  add.l d7,d7
  2701.  add.l d7,a0
  2702.  move.w #0,d7
  2703.  
  2704.  move.w LEFTBRIGHT,d6
  2705.  
  2706.  
  2707.  subq #1,d0
  2708.  swap d0
  2709.  move.w HIGHPOLY,d0
  2710.  swap d0
  2711.  
  2712.  
  2713. ; d0=xdist
  2714. ; d2=U    a1=DU
  2715. ; d3=V  a4=DV
  2716. ; d4=X  a5=DX
  2717. ; d5=Y  a6=DY
  2718. ; d6=Z  a3=DZ
  2719.  
  2720. ; d0= polynum : polynum : counter : counter
  2721. ; d1= scratch : scratch : scratch : scratch
  2722. ; d2= u : uacc : sv : svacc
  2723. ; d3= v : v : vacc : vacc
  2724. ; d4= x : x : xacc : xacc
  2725. ; d5= su : su : suacc : suacc
  2726. ; d6= z : zacc : bright : brightacc
  2727. ; d7= scratch : scratch : scratch : scratch
  2728.  
  2729. ; a0= textures
  2730. ; a1= uspeed : uspeed : suspeed : suspeed
  2731. ; a2= screen pointer
  2732. ; a3= svspeed : svspeed : svspeed : svspeed
  2733. ; a4= vspeed : vspeed : vspeed : vspeed
  2734. ; a5= xspeed : xspeed : xspeed : xspeed
  2735. ; a6= zspeed : zspeed :brightspeed : brightspeed
  2736. ; a7= shadowmap pointer
  2737.  
  2738.  move.w d2,-(a7)
  2739.  move.l d5,-(a7)
  2740.  move.l a3,-(a7)
  2741.  
  2742.  move.w #0,d2
  2743.  move.l #0,d5
  2744.  move.l #0,a3
  2745.  
  2746.  move.w FIRSTLEN,d0
  2747.  subq #1,d0
  2748.  bsr STARTLINE
  2749.  
  2750.  
  2751.  move.l (a7)+,a3
  2752.  move.l (a7)+,d5
  2753.  move.w (a7)+,d2
  2754.  
  2755.  move.w LASTLEN,d0
  2756.  subq #1,d0
  2757.  
  2758.  bsr STARTLINE
  2759.  
  2760.  
  2761.  move.l (a7)+,d1
  2762.  move.l (a7)+,a0
  2763.  move.l (a7)+,a2
  2764.  
  2765.  bra .noline
  2766.  
  2767.  
  2768. .bothaway:
  2769.  
  2770.  move.w #0,6+RIGHTUVS-LEFTUVS(a0)
  2771.  move.w #0,6(a0)
  2772.  
  2773. .bothtowards:
  2774.  
  2775.  move.l RIGHTUVS-LEFTUVS(a0),d7
  2776.  move.l (a0)+,d2 
  2777.  
  2778.  and.l #$ffffff,d2
  2779.  and.l #$ffffff,d7
  2780.  
  2781.  moveq #0,d3
  2782.  moveq #0,d5
  2783.  move.w d2,d3
  2784.  move.w d7,d5
  2785.  swap d3
  2786.  swap d5
  2787.  sub.l d3,d5
  2788.  divs.l d0,d5
  2789.  asr.l #8,d5
  2790.  move.w d5,RIGHTBRIGHT
  2791.  asr.l #8,d3
  2792.  move.w d3,LEFTBRIGHT
  2793.  
  2794.  clr.w d2
  2795.  clr.w d7
  2796.  sub.l d2,d7
  2797.  asl.l #8,d2
  2798.  divs.l d0,d7
  2799.  asl.l #8,d7
  2800.  
  2801.  move.l RIGHTUVS-LEFTUVS(a0),d6 
  2802.  move.l (a0)+,d3
  2803.  
  2804.  moveq #0,d4
  2805.  moveq #0,d5
  2806.  
  2807.  move.w d6,d5
  2808.  move.w d3,d4
  2809.  move.b #0,d4
  2810.  move.b #0,d5
  2811.  
  2812.  sub.l d4,d5
  2813.  divs.l d0,d5
  2814.  
  2815.  move.w d4,d2
  2816.  move.w d5,d7
  2817.  move.l d7,a1
  2818.  moveq #0,d4
  2819.  moveq #0,d5
  2820.  
  2821.  move.b d6,d5
  2822.  move.b d3,d4
  2823.  
  2824.  swap d5
  2825.  swap d4
  2826.  
  2827.  sub.l d4,d5
  2828.  divs.l d0,d5
  2829.  
  2830.  move.l d5,a3
  2831.  move.l d4,d5
  2832.  
  2833.   
  2834.  clr.w d3
  2835.  clr.w d6
  2836.  sub.l d3,d6
  2837.  divs.l d0,d6
  2838.  move.l d6,a4
  2839.  
  2840.  move.w RIGHTUVS-LEFTUVS(a0),d7
  2841.  move.w (a0)+,d4
  2842.  swap d7
  2843.  clr.w d7
  2844.  swap d4
  2845.  clr.w d4
  2846.  sub.l d4,d7
  2847.  divs.l d0,d7
  2848.  move.l d7,a5
  2849.  
  2850. ; move.w RIGHTUVS-LEFTUVS(a0),d7
  2851. ; swap d7
  2852. ; clr.w d7
  2853.  move.w (a0)+,d7
  2854. ; swap d5
  2855. ; clr.w d5
  2856. ; sub.l d5,d7
  2857. ; divs.l d0,d7
  2858. ; move.l d7,a6
  2859.  
  2860.  move.w RIGHTUVS-LEFTUVS(a0),d7
  2861.  swap d7
  2862.  clr.w d7
  2863.  move.w (a0)+,d6
  2864.  swap d6
  2865.  clr.w d6
  2866.  sub.l d6,d7
  2867.  divs.l d0,d7
  2868.  
  2869.  lsl.l #8,d6
  2870.  lsl.l #8,d7
  2871.  
  2872.  move.w RIGHTBRIGHT,d7
  2873.  move.l d7,a6
  2874.  
  2875.  move.l a0,-(a7)
  2876.  move.l d1,-(a7)
  2877.  move.l #TEXTURES,a0
  2878.  move.w TEXTUREADD,d7
  2879.  bge.s .okaddtes5
  2880.  and.w #$7fff,d7
  2881.  add.l #65536*2,a0
  2882. .okaddtes5:
  2883.  ext.l d7
  2884.  add.l d7,d7
  2885.  add.l d7,a0
  2886.  move.w #0,d7
  2887.  
  2888.  move.w LEFTBRIGHT,d6
  2889.  
  2890.  subq #1,d0
  2891.  swap d0
  2892.  move.w HIGHPOLY,d0
  2893.  swap d0
  2894.  
  2895.  
  2896. ; d0=xdist
  2897. ; d2=U    a1=DU
  2898. ; d3=V  a4=DV
  2899. ; d4=X  a5=DX
  2900. ; d5=Y  a6=DY
  2901. ; d6=Z  a3=DZ
  2902.  
  2903. ; d0= polynum : polynum : counter : counter
  2904. ; d1= scratch : scratch : scratch : scratch
  2905. ; d2= u : uacc : sv : svacc
  2906. ; d3= v : v : vacc : vacc
  2907. ; d4= x : x : xacc : xacc
  2908. ; d5= su : su : suacc : suacc
  2909. ; d6= z : zacc : bright : brightacc
  2910. ; d7= scratch : scratch : scratch : scratch
  2911.  
  2912. ; a0= textures
  2913. ; a1= uspeed : uspeed : suspeed : suspeed
  2914. ; a2= screen pointer
  2915. ; a3= svspeed : svspeed : svspeed : svspeed
  2916. ; a4= vspeed : vspeed : vspeed : vspeed
  2917. ; a5= xspeed : xspeed : xspeed : xspeed
  2918. ; a6= zspeed : zspeed :brightspeed : brightspeed
  2919. ; a7= shadowmap pointer
  2920.  
  2921.  bsr STARTLINE
  2922.  
  2923.  move.l (a7)+,d1
  2924.  move.l (a7)+,a0
  2925.  move.l (a7)+,a2
  2926.  
  2927. .noline:
  2928.  add.w #320,a2
  2929.  
  2930.  swap d1
  2931.  dbra d1,DOAHORLINEGOUR
  2932.  
  2933.  bra NOPOLYGON
  2934.  
  2935.  
  2936.  
  2937.  
  2938.  
  2939. *******************************
  2940. STARTLINE:
  2941.  
  2942.  move.l a7,SAVESTACK
  2943.  move.l #SHADOWBUFFER,a7
  2944.  
  2945.  moveq #0,d1
  2946.  swap d6
  2947.  move.w d6,d1
  2948.  swap d4
  2949.  move.b d4,d1
  2950.  swap d4
  2951.  swap d6
  2952.  
  2953.  swap d0
  2954.  moveq #0,d7
  2955.  move.b (a7,d1.l),d7
  2956.  cmp.w d7,d0
  2957.  ble .startlight
  2958.  swap d0
  2959.  bra INTHEDARKGOUR
  2960. .startlight:
  2961.  swap d0
  2962.  bra INTHELIGHTGOUR 
  2963. .startdark:
  2964. ***********************************
  2965.  
  2966.  
  2967.  
  2968. PENUMBRAGOUR:
  2969.  moveq #0,d1
  2970.  swap d6
  2971.  move.w d6,d1
  2972.  swap d4
  2973.  move.b d4,d1
  2974.  swap d4
  2975.  swap d6
  2976.  add.l a5,d4
  2977.  add.l a6,d6
  2978.  add.l a3,d5
  2979.  
  2980.  swap d0
  2981.  moveq #0,d7
  2982.  move.b (a7,d1.l),d7
  2983.  cmp.w d7,d0
  2984.  ble INTOLIGHTGOUR
  2985.  bra.s INTODARKGOUR
  2986.  
  2987. INTHEDARKGOUR:
  2988.  moveq #0,d1
  2989.  swap d6
  2990.  move.w d6,d1
  2991.  swap d4
  2992.  move.b d4,d1
  2993.  swap d4
  2994.  swap d6
  2995.  add.l a5,d4
  2996.  add.l a6,d6
  2997.  add.l a3,d5
  2998.  
  2999.  swap d0
  3000.  moveq #0,d7
  3001.  move.b (a7,d1.l),d7
  3002.  cmp.w d7,d0
  3003.  ble.s INTOPENUMGOUR
  3004. INTODARKGOUR:
  3005.  swap d0
  3006.  move.w #$5c00,d7
  3007.  swap d2
  3008.  move.w d2,d1
  3009.  swap d3
  3010.  move.b d3,d1
  3011.  swap d2
  3012.  swap d3
  3013.  add.l a1,d2
  3014.  add.l a4,d3
  3015.  
  3016.  move.b 1(a0,d1.w*8),d7
  3017.  bra DARKplottt
  3018.  
  3019. .noplottt
  3020.  addq #1,a2
  3021.  dbra d0,INTHEDARKGOUR
  3022.  bra DONEDONEBUM
  3023.  
  3024. INTOPENUMGOUR:
  3025.  swap d0
  3026.  move.w d6,d7
  3027.  
  3028.  sub.w #$5c00,d7
  3029.  asr.w #1,d7
  3030.  add.w #$5c00,d7
  3031.  
  3032.  swap d2
  3033.  move.w d2,d1
  3034.  swap d3
  3035.  move.b d3,d1
  3036.  swap d2
  3037.  swap d3
  3038.  add.l a1,d2
  3039.  add.l a4,d3
  3040.  
  3041.  move.b 1(a0,d1.w*8),d7
  3042.  bra.s PENUMplottt
  3043.  
  3044. .noplottt
  3045.  addq #1,a2
  3046.  dbra d0,PENUMBRAGOUR
  3047.  bra DONEDONEBUM
  3048.  
  3049.  
  3050. INTHELIGHTGOUR:
  3051.  
  3052.  moveq #0,d1
  3053.  swap d6
  3054.  move.w d6,d1
  3055.  swap d4
  3056.  move.b d4,d1
  3057.  swap d4
  3058.  swap d6
  3059.  add.l a5,d4
  3060.  add.l a6,d6
  3061.  add.l a3,d5
  3062.  
  3063.  swap d0
  3064.  moveq #0,d7
  3065.  move.b (a7,d1.l),d7
  3066.  cmp.w d7,d0
  3067.  bgt.s INTOPENUMGOUR
  3068. INTOLIGHTGOUR:
  3069.  swap d0
  3070.  move.w d6,d7
  3071.  swap d7
  3072.  swap d2
  3073.  move.w d2,d1
  3074.  swap d3
  3075.  move.b d3,d1
  3076.  swap d2
  3077.  swap d3
  3078.  add.l a1,d2
  3079.  add.l a4,d3
  3080.   
  3081.  move.w (a0,d1.w*8),d7
  3082.  bra.s LIGHTPLOTT
  3083. .noplottt:
  3084.  addq #1,a2
  3085.  dbra d0,INTHELIGHTGOUR
  3086. FLIBBLEY:
  3087.  bra DONEDONEBUM
  3088.  
  3089. PENUMplottt
  3090.  move.b GOURPAL(pc,d7.w),(a2)+
  3091.  dbra d0,PENUMBRAGOUR
  3092.  bra DONEDONEBUM
  3093.  
  3094. DARKplottt
  3095.  move.b GOURPAL(pc,d7.w),(a2)+
  3096.  dbra d0,INTHEDARKGOUR
  3097.  bra.s FLIBBLEY
  3098.  
  3099. LIGHTPLOTT:
  3100.  move.l #65536,d1
  3101.  move.w d2,d1
  3102.  swap d5
  3103.  move.b d5,d1
  3104.  swap d5
  3105.  
  3106.  move.b (a7,d1.l),d1
  3107.  lsl.w #8,d1
  3108.  add.w d7,d1
  3109.  swap d7
  3110.  move.b d1,d7
  3111.  move.b GOURPAL(pc,d7.w),d1
  3112.  move.b GOURPAL(pc,d1.w),(a2)+
  3113.  dbra d0,INTHELIGHTGOUR
  3114.  bra.s FLIBBLEY
  3115.  
  3116.  
  3117. GOURPAL: incbin "ab3:includes/shadow.pal"
  3118.  
  3119. DONEDONEBUM:
  3120.  move.l SAVESTACK,a7
  3121.  rts
  3122.  
  3123.  
  3124.  
  3125. LEFTSHINEV: dc.l 0
  3126. RIGHTSHINEV: dc.l 0
  3127. LEFTSHINEU: dc.l 0
  3128. RIGHTSHINEU: dc.l 0
  3129.  
  3130. TOPPTR: dc.l 0
  3131. TOPPTNUM: dc.w 0
  3132. BOTPTNUM: dc.w 0
  3133. LEFTBRIGHT: dc.w 0
  3134. RIGHTBRIGHT: dc.l 0
  3135. LEFTSPEC: dc.w 0
  3136. RIGHTSPEC: dc.w 0
  3137.  
  3138. ***********************************************
  3139.     
  3140. SIMPLECALCLINE:
  3141.  move.l #ONSCREENPTS,a1
  3142.  
  3143.  move.w 2(a1,d0.w*4),d2        ;fy
  3144.  move.w 2(a1,d1.w*4),d7        ;sy
  3145.  
  3146.  move.l #RIGHTUVS,a3
  3147.  asr.w #2,d2
  3148.  asr.w #2,d7
  3149.  cmp.w d2,d7 
  3150.  beq .noline
  3151.  
  3152.  bgt.s .lineonright
  3153. .lineonleft:
  3154.  move.l #LEFTUVS,a3
  3155.  exg d0,d1
  3156.  exg d2,d7
  3157.  
  3158. .lineonright:
  3159.  move.w d0,TOPPTNUM
  3160.  move.w d1,BOTPTNUM
  3161.  
  3162.  sub.w d2,d7
  3163.  asl.w #4,d2
  3164.  add.w d2,a3
  3165.  move.l a3,TOPPTR
  3166.  
  3167.  move.w d7,YDIFF
  3168.  
  3169.  move.w (a1,d0.w*4),d3        ;fx
  3170.  move.w (a1,d1.w*4),d7        ;sx
  3171.  
  3172.  sub.w d3,d7
  3173.  swap d3
  3174.  swap d7
  3175.  clr.w d3
  3176.  clr.w d7
  3177.  divs.l YDIFF-2,d7
  3178.  move.l d7,a0    ; dx
  3179.  
  3180.  move.l #UVCOORDS,a2
  3181.  move.l #SHADOWPTS,a1
  3182.  
  3183.  move.w (a2,d0.w*4),d4
  3184.  move.w 2(a2,d0.w*4),d5
  3185.  move.w (a2,d1.w*4),d6
  3186.  move.w 2(a2,d1.w*4),d7
  3187.  
  3188.  sub.w d4,d6
  3189.  sub.w d5,d7
  3190.  swap d4
  3191.  swap d5
  3192.  clr.w d4
  3193.  clr.w d5
  3194.  swap d6
  3195.  swap d7
  3196.  clr.w d6
  3197.  clr.w d7
  3198.  
  3199.  divs.l YDIFF-2,d6
  3200.  divs.l YDIFF-2,d7
  3201.  
  3202.  move.l d6,a4
  3203.  move.l d7,a5
  3204.  
  3205.  muls #10,d0
  3206.  muls #10,d1
  3207.  move.l (a1,d0.w),d6
  3208.  
  3209.  move.l (a1,d1.w),d7
  3210.  asl.l #5,d6
  3211.  asl.l #5,d7
  3212.  sub.l d6,d7
  3213.  divs.l YDIFF-2,d7
  3214.  move.l d7,a2
  3215.  move.l d6,a6
  3216.  
  3217.  move.l 4(a1,d0.w),d6
  3218.  move.l 4(a1,d1.w),d7
  3219.  asl.l #5,d6
  3220.  asl.l #5,d7
  3221.  sub.l d6,d7
  3222.  divs.l YDIFF-2,d7
  3223.  exg d7,a6
  3224.  exg d7,d6
  3225.  
  3226.  move.w 8(a1,d0.w),d0
  3227.  move.w 8(a1,d1.w),d1
  3228.  swap d0
  3229.  swap d1
  3230.  clr.w d0
  3231.  clr.w d1
  3232.  asr.l #2,d0
  3233.  asr.l #2,d1
  3234.  sub.l d0,d1
  3235.  divs.l YDIFF-2,d1
  3236.  move.l d1,a1
  3237.  move.l YDIFF-2,d1
  3238.  subq #1,d1
  3239.  
  3240. ; d3=sx a0=dsx
  3241. ; d4=u a4=du
  3242. ; d5=v a5=dv
  3243. ; d6=x a2=dx
  3244. ; d7=y a6=dy
  3245. ; d0=z a1=dz
  3246. ; d1=dsy
  3247.  
  3248.  
  3249.  add.l #128*65536,d6
  3250.  add.l #128*65536,d7
  3251.  add.l #128*65536,d0
  3252.  
  3253. .PUTINLINE:
  3254.  swap d3
  3255.  move.w d3,(a3)+
  3256.  swap d3
  3257.  add.l a0,d3
  3258.  move.l d4,(a3)+
  3259.  add.l a4,d4
  3260.  move.l d5,(a3)+
  3261.  swap d6
  3262.  add.l a5,d5
  3263.  move.w d6,(a3)+
  3264.  swap d6
  3265.  swap d7
  3266.  add.l a2,d6
  3267.  move.w d7,(a3)+
  3268.  swap d7
  3269.  swap d0
  3270.  add.l a6,d7
  3271.  move.w d0,(a3)+
  3272.  swap d0
  3273.  add.l a1,d0
  3274.  dbra d1,.PUTINLINE
  3275.  
  3276.  tst.b Gouraud
  3277.  beq .noline
  3278.  
  3279.  move.w TOPPTNUM,d0
  3280.  move.w BOTPTNUM,d1
  3281.  move.l TOPPTR,a3
  3282.  moveq #0,d6
  3283.  move.w YDIFF,d6
  3284.  
  3285.  move.l #SPECBRIGHTS,a2
  3286.  
  3287.  move.w 2(a2,d0.w*4),d2
  3288.  move.w 2(a2,d1.w*4),d3
  3289.  
  3290.  asr.w #4,d2
  3291.  asr.w #4,d3
  3292.  
  3293.  tst.w d2
  3294.  blt .firsttowards
  3295.  bgt.s .firstaway
  3296.  
  3297.  tst.w d3
  3298.  ble .bothtowards
  3299.  bra .bothaway
  3300.  
  3301. .firstaway
  3302.  tst.w d3
  3303.  blt .sectowards
  3304.  bra .bothaway
  3305.  
  3306. .firsttowards:
  3307.  tst.w d3
  3308.  ble .bothtowards
  3309.  
  3310. ; First one is towards, the second away.
  3311. ; Do the line in two bits: one heading
  3312. ; from the first point to the rim, the
  3313. ; other heading from the rim to the second
  3314. ; point and flagged as behind.
  3315.  
  3316.  move.w d6,d7    ; total length to draw
  3317.  move.w d2,FIRSTY
  3318.  move.w d3,LASTY
  3319.  
  3320.  neg.w d2
  3321.  add.w d2,d3     ; total change in Y
  3322.  
  3323.  bra.s .onetowards
  3324.  
  3325. .sectowards:
  3326.  move.w d6,d7    ; total length to draw
  3327.  move.w d2,FIRSTY
  3328.  move.w d3,LASTY
  3329.  neg.w d3
  3330.  add.w d2,d3
  3331.  
  3332. .onetowards:
  3333.  
  3334.  muls d2,d6
  3335.  divs d3,d6    ; length of first bit of line.
  3336.  
  3337.  ext.l d6
  3338.  ext.l d7
  3339.  
  3340.  move.w d6,FIRSTLEN
  3341.  sub.l d6,d7
  3342.  move.w d7,LASTLEN
  3343.  
  3344.  add.l d7,d6
  3345.  
  3346.  move.w FIRSTY,d2
  3347.  move.w LASTY,d3
  3348.  swap d2
  3349.  clr.w d2
  3350.  swap d3
  3351.  clr.w d3
  3352.  sub.l d2,d3
  3353.  divs.l d6,d3
  3354.  move.l d3,a6
  3355.  move.l d2,d7
  3356.  
  3357.  moveq #0,d2
  3358.  moveq #0,d3
  3359.  moveq #0,d4
  3360.  moveq #0,d5
  3361.  move.b (a2,d0.w*4),d2
  3362.  move.b 1(a2,d0.w*4),d3
  3363.  
  3364.  move.w d2,FIRSTU
  3365.  move.w d3,FIRSTV
  3366.  
  3367.  move.w d2,d4
  3368.  move.w d3,d5
  3369.  sub.w #128,d2
  3370.  sub.w #128,d3
  3371.  muls d2,d2
  3372.  muls d3,d3
  3373.  add.l d3,d2
  3374.  jsr CALCSQROOT
  3375.  
  3376.  tst.w d2
  3377.  beq.s .nochng
  3378.  
  3379.  sub.w #128,d4
  3380.  sub.w #128,d5
  3381.  muls #127,d4
  3382.  muls #127,d5
  3383.  divs d2,d4
  3384.  divs d2,d5
  3385.  add.w #128,d4
  3386.  add.w #128,d5
  3387.  
  3388. .nochng:
  3389.  
  3390.  move.w d4,MIDU
  3391.  move.w d5,MIDV
  3392.  
  3393.  move.b (a2,d1.w*4),d4
  3394.  move.b 1(a2,d1.w*4),d5
  3395.  move.w d4,SECU
  3396.  move.w d5,SECV
  3397.  
  3398. ; move.w d4,d2
  3399. ; move.w d5,d3
  3400. ;
  3401. ; sub.w #128,d2
  3402. ; sub.w #128,d3
  3403. ; muls d2,d2
  3404. ; muls d3,d3
  3405. ; add.l d3,d2
  3406. ; jsr CALCSQROOT
  3407. ;
  3408. ; tst.w d2
  3409. ; beq.s .nochng2
  3410. ;
  3411. ; sub.w #128,d4
  3412. ; sub.w #128,d5
  3413. ; muls #127,d4
  3414. ; muls #127,d5
  3415. ; divs d2,d4
  3416. ; divs d2,d5
  3417. ; add.w #128,d4
  3418. ; add.w #128,d5
  3419. ;.nochng2:
  3420. ;
  3421. ; add.w MIDU,d4
  3422. ; add.w MIDV,d5
  3423. ; asr.w #1,d4
  3424. ; asr.w #1,d5
  3425. ; move.w d4,MIDU
  3426. ; move.w d4,MIDV
  3427.  
  3428.  move.l #NORMBRIGHTS,a2
  3429.  move.w (a2,d0.w*2),d0
  3430.  move.w (a2,d1.w*2),d1
  3431.  
  3432.  sub.w d0,d1
  3433.  swap d1
  3434.  swap d0
  3435.  divs.l d6,d1
  3436.  
  3437.  move.w FIRSTLEN,d6
  3438.  beq.s .nofirstbit
  3439.  ext.l d6
  3440.  
  3441.  moveq #0,d2
  3442.  moveq #0,d3
  3443.  moveq #0,d4
  3444.  moveq #0,d5
  3445.  move.w FIRSTU,d2
  3446.  move.w MIDU,d3
  3447.  move.w FIRSTV,d4
  3448.  move.w MIDV,d5
  3449.  
  3450.  sub.w d2,d3
  3451.  swap d2
  3452.  swap d3
  3453.  divs.l d6,d3
  3454.  move.l d3,a4
  3455.  
  3456.  sub.w d4,d5
  3457.  swap d4
  3458.  swap d5
  3459.  divs.l d6,d5
  3460.  move.l d5,a5
  3461.  
  3462.  bsr DOABITOFLINE
  3463. .nofirstbit:
  3464.  
  3465.  move.w LASTLEN,d6
  3466.  beq.s .nosecbit
  3467.  ext.l d6
  3468.  
  3469.  moveq #0,d2
  3470.  moveq #0,d3
  3471.  moveq #0,d4
  3472.  moveq #0,d5
  3473.  move.w MIDU,d2
  3474.  move.w SECU,d3
  3475.  move.w MIDV,d4
  3476.  move.w SECV,d5
  3477.  
  3478.  sub.w d2,d3
  3479.  swap d2
  3480.  swap d3
  3481.  divs.l d6,d3
  3482.  move.l d3,a4
  3483.  
  3484.  sub.w d4,d5
  3485.  swap d4
  3486.  swap d5
  3487.  divs.l d6,d5
  3488.  move.l d5,a5
  3489.  
  3490.  bsr DOABITOFLINE
  3491. .nosecbit:
  3492.  
  3493.  bra .noline
  3494.  
  3495. .bothaway
  3496.  
  3497. ; Both are away, so do it simply.
  3498.  
  3499. .bothtowards:
  3500.  
  3501. ; Both are towards, so do it simply and flag all
  3502. ; points as towards.
  3503.  
  3504.  swap d2
  3505.  clr.w d2
  3506.  swap d3
  3507.  clr.w d3
  3508.  sub.l d2,d3
  3509.  divs.l d6,d3
  3510.  move.l d3,a6
  3511.  move.l d2,d7
  3512.  
  3513.  moveq #0,d2
  3514.  moveq #0,d3
  3515.  moveq #0,d4
  3516.  moveq #0,d5
  3517.  move.b (a2,d0.w*4),d2
  3518.  move.b (a2,d1.w*4),d3
  3519.  move.b 1(a2,d0.w*4),d4
  3520.  move.b 1(a2,d1.w*4),d5
  3521.  
  3522.  sub.w d2,d3
  3523.  swap d2
  3524.  swap d3
  3525.  divs.l d6,d3
  3526.  move.l d3,a4
  3527.  
  3528.  sub.w d4,d5
  3529.  swap d4
  3530.  swap d5
  3531.  divs.l d6,d5
  3532.  move.l d5,a5
  3533.  
  3534.  move.l #NORMBRIGHTS,a2
  3535.  move.w (a2,d0.w*2),d0
  3536.  move.w (a2,d1.w*2),d1
  3537.  
  3538.  sub.w d0,d1
  3539.  swap d1
  3540.  swap d0
  3541.  divs.l d6,d1
  3542.  
  3543.  bsr DOABITOFLINE
  3544.  
  3545. .noline:
  3546.  rts
  3547.  
  3548.  DOABITOFLINE:
  3549.  subq #1,d6
  3550.  
  3551. .STICKINGOUR:
  3552.  swap d7
  3553.  move.b d7,2(a3)
  3554.  swap d7
  3555.  add.l a6,d7
  3556.  swap d0
  3557.  move.w d0,4(a3)
  3558.  swap d0
  3559.  add.l d1,d0
  3560.  swap d2
  3561.  move.b d2,8(a3)
  3562.  swap d4
  3563.  move.b d4,9(a3)
  3564.  swap d4
  3565.  adda.w #16,a3
  3566.  swap d2
  3567.  add.l a4,d2
  3568.  add.l a5,d4
  3569.  dbra d6,.STICKINGOUR
  3570.  
  3571.  rts
  3572.  
  3573. FIRSTY: dc.w 0
  3574. LASTY: dc.w 0
  3575. FIRSTU: dc.w 0
  3576. SECU: dc.w 0
  3577. FIRSTV: dc.w 0
  3578. SECV: dc.w 0
  3579.     dc.w 0
  3580. FIRSTLEN: dc.w 0
  3581.     dc.w 0
  3582. LASTLEN: dc.w 0
  3583. MIDU: dc.w 0
  3584. MIDV: dc.w 0
  3585.  
  3586. *!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  3587.  
  3588.  
  3589.  
  3590. ************************************************
  3591. ************************************************
  3592. ************************************************
  3593. ************************************************
  3594. ************************************************
  3595. ************************************************
  3596. ************************************************
  3597. ************************************************
  3598. ************************************************
  3599. ************************************************
  3600. ************************************************
  3601. ************************************************
  3602. ************************************************
  3603. ************************************************
  3604. ************************************************
  3605. ************************************************
  3606. ************************************************
  3607.  
  3608.  move.w d3,TOPLINE
  3609.  move.w d4,BOTLINE
  3610.  
  3611.  
  3612.  
  3613.  
  3614. *********************************************
  3615.  
  3616. CALCSQROOT:
  3617.  tst.l d2
  3618.  beq .oksqr
  3619.  
  3620.  movem.l d0/d1/d3-d7/a0-a6,-(a7)
  3621.  
  3622.  move.w #31,d0
  3623. .findhigh
  3624.  btst d0,d2
  3625.  bne .foundhigh
  3626.  dbra d0,.findhigh
  3627. .foundhigh
  3628.  asr.w #1,d0
  3629.  clr.l d3
  3630.  bset d0,d3
  3631.  move.l d3,d0
  3632.  
  3633.  move.w d0,d1
  3634.  muls d1,d1    ; x*x
  3635.  sub.l d2,d1    ; x*x-a
  3636.  asr.l #1,d1    ; (x*x-a)/2
  3637.  divs d0,d1    ; (x*x-a)/2x
  3638.  sub.w d1,d0    ; second approx
  3639.  bgt .stillnot0
  3640.  move.w #1,d0
  3641. .stillnot0
  3642.  
  3643.  move.w d0,d1
  3644.  muls d1,d1
  3645.  sub.l d2,d1
  3646.  asr.l #1,d1
  3647.  divs d0,d1
  3648.  sub.w d1,d0    ; second approx
  3649.  bgt .stillnot02
  3650.  move.w #1,d0
  3651. .stillnot02
  3652.  
  3653.  move.w d0,d1
  3654.  muls d1,d1
  3655.  sub.l d2,d1
  3656.  asr.l #1,d1
  3657.  divs d0,d1
  3658.  sub.w d1,d0    ; second approx
  3659.  bgt .stillnot03
  3660.  move.w #1,d0
  3661. .stillnot03
  3662.  
  3663.  move.w d0,d2
  3664.  ext.l d2
  3665.  
  3666.  movem.l (a7)+,d0/d1/d3-d7/a0-a6
  3667.  
  3668. .oksqr
  3669.  rts
  3670.  
  3671.  
  3672. **********************************************
  3673. **********************************************
  3674. **********************************************
  3675. **********************************************
  3676. **********************************************
  3677. **********************    ************************
  3678. **********************************************
  3679. **********************************************
  3680. **********************************************
  3681. **********************************************
  3682. **********************************************
  3683. **********************************************
  3684. **********************************************
  3685. **********************************************
  3686. **********************************************
  3687. **********************************************
  3688. **********************************************
  3689. **********************************************
  3690. **********************************************
  3691.  
  3692. TOPLINE: dc.w 0
  3693. BOTLINE: dc.w 0
  3694.  
  3695.  
  3696.  
  3697. **********************************************
  3698. **********************************************
  3699. **********************************************
  3700. **********************************************
  3701. **********************************************
  3702. **********************************************
  3703. **********************************************
  3704. **********************************************
  3705. **********************************************
  3706. **********************************************
  3707. **********************************************
  3708. **********************************************
  3709. **********************************************
  3710. **********************************************
  3711. **********************************************
  3712. **********************************************
  3713. **********************************************
  3714. **********************************************
  3715. **********************************************
  3716.     
  3717.  
  3718.     
  3719.  dc.w 0
  3720. YDIFF: dc.w 0
  3721.  
  3722. SPINAROUND: dc.w 0    
  3723. XCOS: dc.w 0
  3724. YCOS: dc.w 0
  3725. XSIN: dc.w 0
  3726. YSIN: dc.w 0
  3727. XCOS3: dc.w 0
  3728. YCOS3: dc.w 0
  3729. XSIN3: dc.w 0
  3730. YSIN3: dc.w 0
  3731. XCOS2: dc.w 0
  3732. YCOS2: dc.w 0
  3733. XSIN2: dc.w 0
  3734. YSIN2: dc.w 0
  3735. XADD: dc.l 0
  3736. YADD: dc.l 0
  3737. ZADD: dc.l 0
  3738. XOFF: dc.w 0
  3739. YOFF: dc.w 0
  3740. OLDXM: dc.w 0
  3741. OLDYM: dc.w 0
  3742.  
  3743.  
  3744.  
  3745. TEXTUREADD: dc.w 0
  3746.  
  3747.  
  3748. **********************************************************
  3749.  
  3750. UVCOORDS: ds.l 250
  3751. ROTATEDPTS: ds.l 250*4
  3752. SHADOWPTS: ds.l 250*4
  3753. ONSCREENPTS: ds.l 250
  3754.  
  3755. ZOFF: dc.w 768
  3756.  
  3757. LEFTRIGHT: ds.l 256
  3758.  
  3759. POLYGONDATA:
  3760.  ds.b 30000
  3761.  
  3762. OBJNAME: dc.b "ab3:vectobj/testcube",0
  3763.  even
  3764. doslibname: dc.b 'dos.library',0
  3765.  even
  3766. doslib: dc.l 0
  3767.  
  3768. ****************************
  3769.  
  3770. SINETABLE:
  3771.  incbin "ab3:includes/bigsine"
  3772.  
  3773.  
  3774. YANG: dc.w 0
  3775. XANG: dc.w 0
  3776.  
  3777.  
  3778. xmouse: dc.w 0
  3779. ymouse: dc.w 0
  3780.  
  3781. spleen: dc.w 0
  3782. lastspleen: dc.w 0
  3783.  
  3784. COPIEDPAL:
  3785.  dc.w 256,0
  3786.  ds.l 3*256
  3787.  ds.l 10
  3788.  
  3789. SHADOWBUFFER: ds.l 65536/4
  3790. HIGHLIGHT: incbin "work:temp/HIGHLIGHT"
  3791.  
  3792. PALETTEBIT:
  3793. ; incbin "256palette"
  3794. ; dc.w $ffff,$fffe
  3795.  
  3796.  incbin "ab3:shadowtex/shadowpal"
  3797.  
  3798.  include "ab3:source_4000/truecolchunky.s"
  3799.  
  3800. willy: ds.w 48
  3801.  
  3802.  
  3803. PALS:
  3804.  ds.l 2*49
  3805.  
  3806. pregour: dc.b 0
  3807. Gouraud: dc.b 0
  3808.  
  3809. PointAngPtr: dc.l 0
  3810. FRAMENUM: dc.w 0
  3811. PolyAngPtr: dc.l 0
  3812. PtsPtr: dc.l 0
  3813. LinesPtr: dc.l 0
  3814. POINTER_TO_POINTERS: dc.l 0
  3815. FRAME: dc.w 4
  3816. FLIBBLE: dc.w 0
  3817. START_OF_OBJECT: dc.l 0
  3818. num_points: dc.w 0
  3819. num_frames: dc.w 0
  3820. SORTIT: dc.w 0
  3821. PartBuffer: ds.l 2*32
  3822. endparttab:
  3823.  
  3824. x1: dc.w 0
  3825. y1: dc.w 0
  3826. z1: dc.w 0
  3827. x2: dc.w 0
  3828. y2: dc.w 0
  3829. z2: dc.w 0
  3830. x2b: dc.w 0
  3831. y2b: dc.w 0
  3832. z2b: dc.w 0
  3833.  
  3834. x3: dc.w 0
  3835. y3: dc.w 0
  3836. z3: dc.w 0
  3837.  
  3838. l1: dc.w 0
  3839. l2: dc.w 0
  3840.  
  3841. OBJONOFF: dc.l 0
  3842.  
  3843. SAVEHIGHS: ds.w 30
  3844.  
  3845. FASTBUFFER:
  3846.  dc.l fasty
  3847.  
  3848. fasty: ds.b 320*256
  3849.  
  3850. NORMBRIGHTS: ds.w 250
  3851.  
  3852. SPECBRIGHTS:
  3853.  dcb.l 100,31
  3854.  
  3855. ENDNORM:
  3856.  
  3857. LEFTUVS: ds.w 8*256
  3858. RIGHTUVS: ds.w 8*256
  3859.  
  3860. NORMVECTS: ds.w 3*250
  3861.  
  3862. ;WORLD: incbin "ab3:includes/world"
  3863.  
  3864. ;TWEEN: incbin "ab3:includes/tweenbrightfile"
  3865.  
  3866.  
  3867.  
  3868. NEBBIE: incbin "work:temp/nebbieroar"
  3869.     ds.l (192/4)*16
  3870.  
  3871.  SECTION blib,code_f
  3872.  
  3873. TEXTURES:
  3874.  incbin "ab3:includes/shadowmaps"
  3875.  even
  3876.  
  3877.  SECTION BGDROP,code_c
  3878.  
  3879. RAWSCRN:
  3880.  ds.l 2560*8*4
  3881.